89 lines
2.5 KiB
TypeScript
89 lines
2.5 KiB
TypeScript
import { PrismaClient } from '@prisma/client';
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
async function main() {
|
|
console.log('Adding/updating permissions and Developer role...');
|
|
|
|
// 1. Create or get the emails:delete permission
|
|
const emailsDeletePerm = await prisma.permission.upsert({
|
|
where: { resource_action: { resource: 'emails', action: 'delete' } },
|
|
update: {},
|
|
create: { resource: 'emails', action: 'delete' },
|
|
});
|
|
console.log('emails:delete permission created/found');
|
|
|
|
// 2. Create or get the developer:access permission
|
|
const developerAccessPerm = await prisma.permission.upsert({
|
|
where: { resource_action: { resource: 'developer', action: 'access' } },
|
|
update: {},
|
|
create: { resource: 'developer', action: 'access' },
|
|
});
|
|
console.log('developer:access permission created/found');
|
|
|
|
// 3. Create Developer role if it doesn't exist
|
|
let developerRole = await prisma.role.findUnique({
|
|
where: { name: 'Developer' },
|
|
});
|
|
|
|
if (!developerRole) {
|
|
// Get all permissions for Developer role
|
|
const allPermissions = await prisma.permission.findMany();
|
|
developerRole = await prisma.role.create({
|
|
data: {
|
|
name: 'Developer',
|
|
description: 'Voller Zugriff inkl. Entwickler-Tools',
|
|
permissions: {
|
|
create: allPermissions.map(p => ({ permissionId: p.id })),
|
|
},
|
|
},
|
|
});
|
|
console.log('Developer role created with all permissions');
|
|
}
|
|
|
|
// 4. Add emails:delete to Admin and Developer
|
|
const rolesToUpdate = [
|
|
{ name: 'Admin', permissions: [emailsDeletePerm] },
|
|
{ name: 'Developer', permissions: [emailsDeletePerm, developerAccessPerm] },
|
|
];
|
|
|
|
for (const roleConfig of rolesToUpdate) {
|
|
const role = await prisma.role.findUnique({
|
|
where: { name: roleConfig.name },
|
|
include: { permissions: true },
|
|
});
|
|
|
|
if (!role) {
|
|
console.log(`${roleConfig.name} role not found, skipping...`);
|
|
continue;
|
|
}
|
|
|
|
for (const perm of roleConfig.permissions) {
|
|
const hasPermission = role.permissions.some(
|
|
(rp) => rp.permissionId === perm.id
|
|
);
|
|
|
|
if (!hasPermission) {
|
|
await prisma.rolePermission.create({
|
|
data: {
|
|
roleId: role.id,
|
|
permissionId: perm.id,
|
|
},
|
|
});
|
|
console.log(`Added ${perm.resource}:${perm.action} to ${roleConfig.name}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log('Done!');
|
|
}
|
|
|
|
main()
|
|
.catch((e) => {
|
|
console.error(e);
|
|
process.exit(1);
|
|
})
|
|
.finally(async () => {
|
|
await prisma.$disconnect();
|
|
});
|