From 991642681439889ca6ea1ceaf40a6813217f0912 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Tue, 23 Dec 2025 12:07:33 +0330 Subject: [PATCH] update roles and permissions --- src/common/enums/permission.enum.ts | 30 +++++++++++-------- .../roles/entities/permission.entity.ts | 4 +-- src/modules/roles/providers/roles.service.ts | 12 +------- src/seeders/data/permissions.data.ts | 7 +---- src/seeders/data/roles.data.ts | 12 ++------ src/seeders/permissions.seeder.ts | 6 ++-- src/seeders/roles.seeder.ts | 12 ++------ 7 files changed, 28 insertions(+), 55 deletions(-) diff --git a/src/common/enums/permission.enum.ts b/src/common/enums/permission.enum.ts index cd03754..36a5173 100644 --- a/src/common/enums/permission.enum.ts +++ b/src/common/enums/permission.enum.ts @@ -17,17 +17,19 @@ export enum Permission { // Reports & Finances VIEW_REPORTS = 'view_reports', - MANAGE_FINANCES = 'manage_finances', - // Restaurant Management - GET_OWN_RESTAURANT = 'get_own_restaurant', - GET_ALL_RESTAURANTS = 'get_all_restaurants', - CREATE_RESTAURANT = 'create_restaurant', - DELETE_RESTAURANT = 'delete_restaurant', + UPDATE_RESTAURANT = 'update_restaurant', // Role Management - CREATE_ROLE = 'create_role', + MANAGE_ROLES = 'manage_roles', + MANAGE_REVIEWS = 'manage_reviews', + MANAGE_COUPONS = 'manage_coupons', + MANAGE_PAYMENTS = 'manage_payments', + MANAGE_DELIVERY = 'manage_delivery', + MANAGE_SETTINGS = 'manage_settings', + MANAGE_SCHEDULES = 'manage_schedules', + MANAGE_REPORTS = 'manage_reports', } /** @@ -42,11 +44,13 @@ export const PermissionTitles: Record = { [Permission.MANAGE_ADMINS]: 'مدیریت مدیران', [Permission.MANAGE_USERS]: 'مدیریت کاربران', [Permission.VIEW_REPORTS]: 'مشاهده گزارشات', - [Permission.MANAGE_FINANCES]: 'مدیریت مالی', - [Permission.GET_OWN_RESTAURANT]: 'مشاهده رستوران خود', - [Permission.GET_ALL_RESTAURANTS]: 'مشاهده همه رستوران‌ها', - [Permission.CREATE_RESTAURANT]: 'ایجاد رستوران', - [Permission.DELETE_RESTAURANT]: 'حذف رستوران', [Permission.UPDATE_RESTAURANT]: 'ویرایش رستوران', - [Permission.CREATE_ROLE]: 'ایجاد نقش', + [Permission.MANAGE_ROLES]: 'مدیریت نقش‌ها', + [Permission.MANAGE_REVIEWS]: 'مدیریت نظرات', + [Permission.MANAGE_COUPONS]: 'مدیریت کوپن‌ها', + [Permission.MANAGE_PAYMENTS]: 'مدیریت پرداخت‌ها', + [Permission.MANAGE_DELIVERY]: 'مدیریت تحویل', + [Permission.MANAGE_SETTINGS]: 'مدیریت تنظیمات', + [Permission.MANAGE_SCHEDULES]: 'مدیریت برنامه‌ها', + [Permission.MANAGE_REPORTS]: 'مدیریت گزارشات', }; diff --git a/src/modules/roles/entities/permission.entity.ts b/src/modules/roles/entities/permission.entity.ts index e3a62ac..2dab209 100755 --- a/src/modules/roles/entities/permission.entity.ts +++ b/src/modules/roles/entities/permission.entity.ts @@ -10,9 +10,7 @@ export class Permission extends BaseEntity { @Property() title!: string; - // اضافه شد - @Property({ default: 'general' }) - group!: string; + @ManyToMany({ entity: () => Role, mappedBy: 'permissions' }) roles = new Collection(this); diff --git a/src/modules/roles/providers/roles.service.ts b/src/modules/roles/providers/roles.service.ts index db64cc9..f818308 100644 --- a/src/modules/roles/providers/roles.service.ts +++ b/src/modules/roles/providers/roles.service.ts @@ -17,7 +17,7 @@ export class RolesService { @InjectRepository(Permission) private readonly permissionRepository: EntityRepository, private readonly em: EntityManager, - ) {} + ) { } async createRestaurantRole(dto: CreateRoleDto, restId: string) { const { name, permissionIds } = dto; @@ -48,11 +48,6 @@ export class RolesService { if (permissions.length !== permissionIds.length) { throw new BadRequestException('One or more permissions not found'); } - // Check if any permission is special - const specialPermissions = permissions.filter(p => p.group === 'special'); - if (specialPermissions.length > 0) { - throw new BadRequestException('Special permissions cannot be assigned'); - } permissions.forEach(p => role.permissions.add(p)); } @@ -102,11 +97,6 @@ export class RolesService { if (permissions.length !== dto.permissionIds.length) { throw new BadRequestException('One or more permissions not found'); } - // Check if any permission is special - const specialPermissions = permissions.filter(p => p.group === 'special'); - if (specialPermissions.length > 0) { - throw new BadRequestException('Special permissions cannot be assigned to roles'); - } permissions.forEach(p => role.permissions.add(p)); } diff --git a/src/seeders/data/permissions.data.ts b/src/seeders/data/permissions.data.ts index 5bc2c3c..286f078 100644 --- a/src/seeders/data/permissions.data.ts +++ b/src/seeders/data/permissions.data.ts @@ -1,15 +1,10 @@ import { Permission, PermissionTitles } from '../../common/enums/permission.enum'; -export const specialPermissions = [ - Permission.CREATE_RESTAURANT, - Permission.DELETE_RESTAURANT, - Permission.UPDATE_RESTAURANT, -]; + export const getPermissionsData = () => { return Object.values(Permission).map(name => ({ name, title: PermissionTitles[name], - group: specialPermissions.includes(name) ? 'special' : 'general', })); }; diff --git a/src/seeders/data/roles.data.ts b/src/seeders/data/roles.data.ts index 63a60cf..faa7412 100644 --- a/src/seeders/data/roles.data.ts +++ b/src/seeders/data/roles.data.ts @@ -10,20 +10,12 @@ export const rolesData: RoleConfig[] = [ { name: 'restaurant', isSystem: false, - permissionFilter: () => true, // Will be filtered by group in seeder + permissionFilter: () => true, // All permissions for restaurant role }, { name: 'accountant', isSystem: false, permissionFilter: (name: Permission) => - name === Permission.VIEW_REPORTS || name === Permission.MANAGE_FINANCES || name === Permission.MANAGE_ORDERS, - }, - { - name: 'superAdmin', - isSystem: true, - permissionFilter: (name: Permission) => - name === Permission.CREATE_RESTAURANT || - name === Permission.DELETE_RESTAURANT || - name === Permission.UPDATE_RESTAURANT, + name === Permission.VIEW_REPORTS || name === Permission.MANAGE_PAYMENTS || name === Permission.MANAGE_ORDERS, }, ]; diff --git a/src/seeders/permissions.seeder.ts b/src/seeders/permissions.seeder.ts index 5a8dfd3..5db378d 100644 --- a/src/seeders/permissions.seeder.ts +++ b/src/seeders/permissions.seeder.ts @@ -13,9 +13,9 @@ export class PermissionsSeeder { permission = em.create(PermissionEntity, permData); em.persist(permission); } else { - // Update existing permission's group if it changed - if (permission.group !== permData.group) { - permission.group = permData.group; + // Update existing permission's title if it changed + if (permission.title !== permData.title) { + permission.title = permData.title; em.persist(permission); } } diff --git a/src/seeders/roles.seeder.ts b/src/seeders/roles.seeder.ts index 5daed18..d2a5279 100644 --- a/src/seeders/roles.seeder.ts +++ b/src/seeders/roles.seeder.ts @@ -19,15 +19,9 @@ export class RolesSeeder { // Add permissions based on role configuration // TypeScript knows role is not null here because we just created it const newRole = role; - if (roleConfig.name === 'restaurant') { - // Add all general permissions to restaurant role - const generalPermissions = permissions.filter(p => p.group === 'general'); - generalPermissions.forEach(p => newRole.permissions.add(p)); - } else { - // For other roles, use the permission filter - const filteredPermissions = permissions.filter(p => roleConfig.permissionFilter(p.name as Permission)); - filteredPermissions.forEach(p => newRole.permissions.add(p)); - } + // Use the permission filter for all roles + const filteredPermissions = permissions.filter(p => roleConfig.permissionFilter(p.name as Permission)); + filteredPermissions.forEach(p => newRole.permissions.add(p)); em.persist(newRole); }