This commit is contained in:
@@ -28,14 +28,18 @@ export const rolesData: RoleConfig[] = [
|
||||
isSystem: true,
|
||||
permissionFilter: (name: PermissionEnum) =>
|
||||
name === PermissionEnum.MANAGE_PAYMENTS ||
|
||||
name === PermissionEnum.NEW_PAYMENT_NOTIFICATION,
|
||||
name === PermissionEnum.NEW_PAYMENT_NOTIFICATION ||
|
||||
name === PermissionEnum.VIEW_ORDERS||
|
||||
name === PermissionEnum.CHANGE_ORDER_STATUS_FROM_FINISHED_TO_INVOICED
|
||||
},
|
||||
|
||||
{
|
||||
name: 'designer',
|
||||
title: 'طراح',
|
||||
isSystem: true,
|
||||
permissionFilter: (name: PermissionEnum) => [PermissionEnum.VIEW_ASSIGNED_ORDERS].includes(name)
|
||||
permissionFilter: (name: PermissionEnum) =>
|
||||
name === PermissionEnum.VIEW_ASSIGNED_ORDERS ||
|
||||
name === PermissionEnum.CHANGE_ORDER_STATUS_FROM_IN_PROGRESS_TO_FINISHED
|
||||
},
|
||||
|
||||
];
|
||||
|
||||
+35
-13
@@ -9,24 +9,46 @@ export class RolesSeeder {
|
||||
const rolesMap = new Map<string, Role>();
|
||||
|
||||
for (const roleConfig of rolesData) {
|
||||
let role = await em.findOne(Role, { name: roleConfig.name });
|
||||
if (!role) {
|
||||
const existingRole = await em.findOne(Role, { name: roleConfig.name });
|
||||
let role: Role;
|
||||
|
||||
if (!existingRole) {
|
||||
role = em.create(Role, {
|
||||
name: roleConfig.name,
|
||||
title: '',
|
||||
isSystem: true,
|
||||
title: roleConfig.title,
|
||||
isSystem: roleConfig.isSystem,
|
||||
});
|
||||
} else {
|
||||
role = existingRole;
|
||||
await role.permissions.init();
|
||||
|
||||
// Add permissions based on role configuration
|
||||
// TypeScript knows role is not null here because we just created it
|
||||
const newRole = role;
|
||||
// Use the permission filter for all roles
|
||||
const filteredPermissions = permissions.filter(p => roleConfig.permissionFilter(p.name as PermissionEnum));
|
||||
filteredPermissions.forEach(p => newRole.permissions.add(p));
|
||||
|
||||
em.persist(newRole);
|
||||
if (role.title !== roleConfig.title) {
|
||||
role.title = roleConfig.title;
|
||||
}
|
||||
// Always add to map, whether existing or newly created
|
||||
|
||||
if (role.isSystem !== roleConfig.isSystem) {
|
||||
role.isSystem = roleConfig.isSystem;
|
||||
}
|
||||
}
|
||||
|
||||
const filteredPermissions = permissions.filter((p) =>
|
||||
roleConfig.permissionFilter(p.name as PermissionEnum),
|
||||
);
|
||||
const filteredPermissionNames = new Set(filteredPermissions.map((p) => p.name));
|
||||
|
||||
for (const existingPermission of role.permissions.getItems()) {
|
||||
if (!filteredPermissionNames.has(existingPermission.name)) {
|
||||
role.permissions.remove(existingPermission);
|
||||
}
|
||||
}
|
||||
|
||||
for (const permission of filteredPermissions) {
|
||||
if (!role.permissions.contains(permission, false)) {
|
||||
role.permissions.add(permission);
|
||||
}
|
||||
}
|
||||
|
||||
em.persist(role);
|
||||
rolesMap.set(roleConfig.name, role);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user