opencrm/backend/prisma/add-email-delete-permission.ts

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();
});