This commit is contained in:
@@ -28,14 +28,18 @@ export const rolesData: RoleConfig[] = [
|
|||||||
isSystem: true,
|
isSystem: true,
|
||||||
permissionFilter: (name: PermissionEnum) =>
|
permissionFilter: (name: PermissionEnum) =>
|
||||||
name === PermissionEnum.MANAGE_PAYMENTS ||
|
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',
|
name: 'designer',
|
||||||
title: 'طراح',
|
title: 'طراح',
|
||||||
isSystem: true,
|
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
|
||||||
},
|
},
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|||||||
+34
-12
@@ -9,24 +9,46 @@ export class RolesSeeder {
|
|||||||
const rolesMap = new Map<string, Role>();
|
const rolesMap = new Map<string, Role>();
|
||||||
|
|
||||||
for (const roleConfig of rolesData) {
|
for (const roleConfig of rolesData) {
|
||||||
let role = await em.findOne(Role, { name: roleConfig.name });
|
const existingRole = await em.findOne(Role, { name: roleConfig.name });
|
||||||
if (!role) {
|
let role: Role;
|
||||||
|
|
||||||
|
if (!existingRole) {
|
||||||
role = em.create(Role, {
|
role = em.create(Role, {
|
||||||
name: roleConfig.name,
|
name: roleConfig.name,
|
||||||
title: '',
|
title: roleConfig.title,
|
||||||
isSystem: true,
|
isSystem: roleConfig.isSystem,
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
role = existingRole;
|
||||||
|
await role.permissions.init();
|
||||||
|
|
||||||
// Add permissions based on role configuration
|
if (role.title !== roleConfig.title) {
|
||||||
// TypeScript knows role is not null here because we just created it
|
role.title = roleConfig.title;
|
||||||
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.isSystem !== roleConfig.isSystem) {
|
||||||
|
role.isSystem = roleConfig.isSystem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Always add to map, whether existing or newly created
|
|
||||||
|
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);
|
rolesMap.set(roleConfig.name, role);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user