Added role typesafe

This commit is contained in:
sianida26 2024-04-10 20:39:44 +07:00
parent 55ab21e726
commit 48812f53fd
3 changed files with 60 additions and 26 deletions

View File

@ -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,
})),
},
},
});
})
);

View File

@ -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;

View File

@ -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;