update roles and permissions
This commit is contained in:
@@ -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, string> = {
|
||||
[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]: 'مدیریت گزارشات',
|
||||
};
|
||||
|
||||
@@ -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<Role>(this);
|
||||
|
||||
@@ -17,7 +17,7 @@ export class RolesService {
|
||||
@InjectRepository(Permission)
|
||||
private readonly permissionRepository: EntityRepository<Permission>,
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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',
|
||||
}));
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
];
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user