Added role typesafe
This commit is contained in:
parent
55ab21e726
commit
48812f53fd
|
|
@ -1,27 +1,38 @@
|
|||
import { Role, PrismaClient } from "@prisma/client";
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
import { log } from "console";
|
||||
import roleData from "../../src/modules/role/data/initialRoles";
|
||||
|
||||
export default async function roleSeed(prisma: PrismaClient) {
|
||||
log("Seeding roles...");
|
||||
|
||||
const roleData: Omit<Role, "id">[] = [
|
||||
{
|
||||
code: "super-admin",
|
||||
description:
|
||||
"Has full access to the system and can manage all features and settings",
|
||||
isActive: true,
|
||||
name: "Super Admin",
|
||||
},
|
||||
];
|
||||
|
||||
await Promise.all(
|
||||
roleData.map(async (role) => {
|
||||
await prisma.role.upsert({
|
||||
where: {
|
||||
code: role.code,
|
||||
},
|
||||
update: role,
|
||||
create: role,
|
||||
update: {
|
||||
code: role.code,
|
||||
description: role.description,
|
||||
isActive: role.isActive,
|
||||
name: role.name,
|
||||
permissions: {
|
||||
connect: role.permissions.map((permissionCode) => ({
|
||||
code: permissionCode,
|
||||
})),
|
||||
},
|
||||
},
|
||||
create: {
|
||||
code: role.code,
|
||||
description: role.description,
|
||||
isActive: role.isActive,
|
||||
name: role.name,
|
||||
permissions: {
|
||||
connect: role.permissions.map((permissionCode) => ({
|
||||
code: permissionCode,
|
||||
})),
|
||||
},
|
||||
},
|
||||
});
|
||||
})
|
||||
);
|
||||
|
|
|
|||
|
|
@ -99,11 +99,20 @@ const permissionData = [
|
|||
{
|
||||
code: "promos.readAll",
|
||||
name: "Read all promos",
|
||||
}
|
||||
},
|
||||
] as const;
|
||||
|
||||
export type PermissionCode = (typeof permissionData)[number]['code'] | "*" | "authenticated-only" | "guest-only";
|
||||
export type SpecificPermissionCode = (typeof permissionData)[number]["code"];
|
||||
|
||||
const exportedPermissionData = permissionData as unknown as Omit<Permission, "id">[];
|
||||
export type PermissionCode =
|
||||
| SpecificPermissionCode
|
||||
| "*"
|
||||
| "authenticated-only"
|
||||
| "guest-only";
|
||||
|
||||
export default exportedPermissionData
|
||||
const exportedPermissionData = permissionData as unknown as Omit<
|
||||
Permission,
|
||||
"id"
|
||||
>[];
|
||||
|
||||
export default exportedPermissionData;
|
||||
|
|
|
|||
|
|
@ -1,17 +1,31 @@
|
|||
import { Role } from "@prisma/client";
|
||||
import exportedPermissionData, {
|
||||
SpecificPermissionCode,
|
||||
} from "../../permission/data/initialPermissions";
|
||||
|
||||
const roleData = [
|
||||
export type RoleData = {
|
||||
code: RoleCode;
|
||||
description: string;
|
||||
isActive: boolean;
|
||||
name: string;
|
||||
permissions: SpecificPermissionCode[];
|
||||
};
|
||||
|
||||
const roleData: RoleData[] = [
|
||||
{
|
||||
code: "super-admin",
|
||||
description:
|
||||
"Has full access to the system and can manage all features and settings",
|
||||
isActive: true,
|
||||
name: "Super Admin",
|
||||
permissions: exportedPermissionData.map(
|
||||
(x) => x.code as SpecificPermissionCode
|
||||
),
|
||||
},
|
||||
] as const;
|
||||
];
|
||||
|
||||
export type RoleCode = (typeof roleData)[number]["code"] | "*";
|
||||
// Manually specify the union of role codes
|
||||
export type RoleCode = "super-admin" | "*";
|
||||
|
||||
const exportedRoleData = roleData as unknown as Omit<Role, "id">;
|
||||
const exportedRoleData = roleData;
|
||||
|
||||
export default exportedRoleData;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user