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 { log } from "console";
|
||||||
|
import roleData from "../../src/modules/role/data/initialRoles";
|
||||||
|
|
||||||
export default async function roleSeed(prisma: PrismaClient) {
|
export default async function roleSeed(prisma: PrismaClient) {
|
||||||
log("Seeding roles...");
|
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(
|
await Promise.all(
|
||||||
roleData.map(async (role) => {
|
roleData.map(async (role) => {
|
||||||
await prisma.role.upsert({
|
await prisma.role.upsert({
|
||||||
where: {
|
where: {
|
||||||
code: role.code,
|
code: role.code,
|
||||||
},
|
},
|
||||||
update: role,
|
update: {
|
||||||
create: role,
|
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,
|
||||||
|
})),
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -95,15 +95,24 @@ const permissionData = [
|
||||||
isActive: true,
|
isActive: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
//Promos
|
//Promos
|
||||||
{
|
{
|
||||||
code: "promos.readAll",
|
code: "promos.readAll",
|
||||||
name: "Read all promos",
|
name: "Read all promos",
|
||||||
}
|
},
|
||||||
] as const;
|
] 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",
|
code: "super-admin",
|
||||||
description:
|
description:
|
||||||
"Has full access to the system and can manage all features and settings",
|
"Has full access to the system and can manage all features and settings",
|
||||||
isActive: true,
|
isActive: true,
|
||||||
name: "Super Admin",
|
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;
|
export default exportedRoleData;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user