opencrm/backend/prisma/add-provider-permissions.ts

118 lines
3.2 KiB
TypeScript

import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
console.log('Adding provider permissions...');
// Create provider permissions
const actions = ['create', 'read', 'update', 'delete'];
for (const action of actions) {
await prisma.permission.upsert({
where: { resource_action: { resource: 'providers', action } },
update: {},
create: { resource: 'providers', action },
});
}
console.log('Provider permissions created');
// Get all provider permissions
const providerPermissions = await prisma.permission.findMany({
where: { resource: 'providers' },
});
// Get admin role
const adminRole = await prisma.role.findUnique({
where: { name: 'Admin' },
include: { permissions: true },
});
if (adminRole) {
// Add provider permissions to admin role if not already assigned
for (const perm of providerPermissions) {
const exists = adminRole.permissions.some(rp => rp.permissionId === perm.id);
if (!exists) {
await prisma.rolePermission.create({
data: {
roleId: adminRole.id,
permissionId: perm.id,
},
});
console.log(`Added providers:${perm.action} to Admin role`);
}
}
}
// Get employee role and add read permission
const employeeRole = await prisma.role.findUnique({
where: { name: 'Mitarbeiter' },
include: { permissions: true },
});
const providerReadPerm = providerPermissions.find(p => p.action === 'read');
if (employeeRole && providerReadPerm) {
const exists = employeeRole.permissions.some(rp => rp.permissionId === providerReadPerm.id);
if (!exists) {
await prisma.rolePermission.create({
data: {
roleId: employeeRole.id,
permissionId: providerReadPerm.id,
},
});
console.log('Added providers:read to Mitarbeiter role');
}
}
// Get read-only role and add read permission
const readOnlyRole = await prisma.role.findUnique({
where: { name: 'Mitarbeiter (Nur-Lesen)' },
include: { permissions: true },
});
if (readOnlyRole && providerReadPerm) {
const exists = readOnlyRole.permissions.some(rp => rp.permissionId === providerReadPerm.id);
if (!exists) {
await prisma.rolePermission.create({
data: {
roleId: readOnlyRole.id,
permissionId: providerReadPerm.id,
},
});
console.log('Added providers:read to Mitarbeiter (Nur-Lesen) role');
}
}
// Get customer role and add read permission
const customerRole = await prisma.role.findUnique({
where: { name: 'Kunde' },
include: { permissions: true },
});
if (customerRole && providerReadPerm) {
const exists = customerRole.permissions.some(rp => rp.permissionId === providerReadPerm.id);
if (!exists) {
await prisma.rolePermission.create({
data: {
roleId: customerRole.id,
permissionId: providerReadPerm.id,
},
});
console.log('Added providers:read to Kunde role');
}
}
console.log('Provider permissions setup completed!');
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});