From 89593d0f2e4b2d9d044aa59511d799624c747f12 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Fri, 21 Nov 2025 15:48:38 +0330 Subject: [PATCH] up --- src/modules/cart/dto/create-cart.dto.ts | 3 +-- .../roles/entities/permission.entity.ts | 5 +++- src/modules/roles/providers/roles.service.ts | 10 ++++++++ src/modules/roles/roles.controller.ts | 9 ++++--- src/seeders/DatabaseSeeder.ts | 25 ++++++++++++++----- 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/modules/cart/dto/create-cart.dto.ts b/src/modules/cart/dto/create-cart.dto.ts index 7f90ff0..550ff1f 100644 --- a/src/modules/cart/dto/create-cart.dto.ts +++ b/src/modules/cart/dto/create-cart.dto.ts @@ -3,7 +3,7 @@ import { IsNotEmpty, IsString, IsArray, ValidateNested, IsNumber, Min } from 'cl import { Type } from 'class-transformer'; export class CartItemDto { - @ApiProperty({ description: 'Food ID', example: '01KA9Q52JSWFY98TW3HZY6XEVZ' }) + @ApiProperty({ description: 'Food ID' }) @IsNotEmpty() @IsString() foodId!: string; @@ -19,7 +19,6 @@ export class CreateCartDto { @ApiProperty({ description: 'List of cart items', type: [CartItemDto], - example: [{ foodId: '01KA9Q52JSWFY98TW3HZY6XEVZ', quantity: 2 }], }) @IsNotEmpty() @IsArray() diff --git a/src/modules/roles/entities/permission.entity.ts b/src/modules/roles/entities/permission.entity.ts index e50d417..7c03473 100755 --- a/src/modules/roles/entities/permission.entity.ts +++ b/src/modules/roles/entities/permission.entity.ts @@ -10,7 +10,10 @@ export class Permission extends BaseEntity { @Property() title!: string; +// اضافه شد + @Property({ default: 'general' }) + group!: string; - @ManyToMany({ entity: () => Role, mappedBy: r => r.permissions }) + @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 2edc264..72b82a1 100644 --- a/src/modules/roles/providers/roles.service.ts +++ b/src/modules/roles/providers/roles.service.ts @@ -49,6 +49,11 @@ 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 to roles'); + } permissions.forEach(p => role.permissions.add(p)); } @@ -122,6 +127,11 @@ 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/modules/roles/roles.controller.ts b/src/modules/roles/roles.controller.ts index 118864f..104a31a 100644 --- a/src/modules/roles/roles.controller.ts +++ b/src/modules/roles/roles.controller.ts @@ -8,6 +8,7 @@ import { FindRolesDto } from './dto/find-roles.dto'; import { AdminAuthGuard } from '../auth/guards/adminAuth.guard'; import { Permissions } from '../auth/decorators/permissions.decorator'; import { RestId } from 'src/common/decorators'; +import { AdminId } from 'src/common/decorators/admin-id.decorator'; @UseGuards(AdminAuthGuard) @ApiBearerAuth() @@ -27,10 +28,12 @@ export class RolesController { } @Get('permissions') - @ApiOperation({ summary: 'Get all permissions' }) + @ApiOperation({ summary: 'Get all permissions that the admin has' }) @ApiResponse({ status: 200, description: 'Permissions retrieved successfully' }) - findAllPermissions() { - return this.permissionService.findAll(); + async findAllPermissions(@AdminId() adminId: string, @RestId() restId: string) { + const adminPermissionNames = await this.permissionService.getAdminPermissions(adminId, restId); + + return adminPermissionNames; } @Permissions('create-role') diff --git a/src/seeders/DatabaseSeeder.ts b/src/seeders/DatabaseSeeder.ts index 5878f92..338c9f9 100644 --- a/src/seeders/DatabaseSeeder.ts +++ b/src/seeders/DatabaseSeeder.ts @@ -13,9 +13,16 @@ import { Permission, PermissionTitles } from '../common/enums/permission.enum'; export class DatabaseSeeder extends Seeder { async run(em: EntityManager) { // 1. Create Permissions (English) + const specialPermissions = [ + Permission.CREATE_RESTAURANT, + Permission.DELETE_RESTAURANT, + Permission.UPDATE_RESTAURANT, + ]; + const permissions = Object.values(Permission).map(name => ({ name, title: PermissionTitles[name], + group: specialPermissions.includes(name) ? 'special' : 'general', })); const createdPermissions: PermissionEntity[] = []; @@ -24,6 +31,12 @@ export class DatabaseSeeder extends Seeder { if (!permission) { 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; + em.persist(permission); + } } createdPermissions.push(permission); } @@ -44,9 +57,9 @@ export class DatabaseSeeder extends Seeder { // Add financial permissions to accountant const financialPerms = createdPermissions.filter( p => - p.name === Permission.VIEW_REPORTS || - p.name === Permission.MANAGE_FINANCES || - p.name === Permission.MANAGE_ORDERS, + (p.name as Permission) === Permission.VIEW_REPORTS || + (p.name as Permission) === Permission.MANAGE_FINANCES || + (p.name as Permission) === Permission.MANAGE_ORDERS, ); financialPerms.forEach(p => role.permissions.add(p)); em.persist(role); @@ -58,9 +71,9 @@ export class DatabaseSeeder extends Seeder { // Add restaurant management permissions to superAdmin const restaurantPerms = createdPermissions.filter( p => - p.name === Permission.CREATE_RESTAURANT || - p.name === Permission.DELETE_RESTAURANT || - p.name === Permission.UPDATE_RESTAURANT, + (p.name as Permission) === Permission.CREATE_RESTAURANT || + (p.name as Permission) === Permission.DELETE_RESTAURANT || + (p.name as Permission) === Permission.UPDATE_RESTAURANT, ); restaurantPerms.forEach(p => role.permissions.add(p)); em.persist(role);