From aa13cdcbbafe1b3a4124015ad3c75523dc5d593f Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Sat, 22 Nov 2025 12:08:30 +0330 Subject: [PATCH] perms --- .../{ => controllers}/roles.controller.ts | 16 +++++----- .../roles/providers/permissions.service.ts | 30 +++++++++++++++++++ src/modules/roles/roles.module.ts | 2 +- 3 files changed, 39 insertions(+), 9 deletions(-) rename src/modules/roles/{ => controllers}/roles.controller.ts (83%) diff --git a/src/modules/roles/roles.controller.ts b/src/modules/roles/controllers/roles.controller.ts similarity index 83% rename from src/modules/roles/roles.controller.ts rename to src/modules/roles/controllers/roles.controller.ts index 104a31a..b7c6c54 100644 --- a/src/modules/roles/roles.controller.ts +++ b/src/modules/roles/controllers/roles.controller.ts @@ -1,12 +1,12 @@ import { Controller, Get, Post, Body, Param, Patch, Delete, Query, UseGuards } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiBody, ApiResponse, ApiBearerAuth } from '@nestjs/swagger'; -import { RolesService } from './providers/roles.service'; -import { PermissionsService } from './providers/permissions.service'; -import { CreateRoleDto } from './dto/create-role.dto'; -import { UpdateRoleDto } from './dto/update-role.dto'; -import { FindRolesDto } from './dto/find-roles.dto'; -import { AdminAuthGuard } from '../auth/guards/adminAuth.guard'; -import { Permissions } from '../auth/decorators/permissions.decorator'; +import { RolesService } from '../providers/roles.service'; +import { PermissionsService } from '../providers/permissions.service'; +import { CreateRoleDto } from '../dto/create-role.dto'; +import { UpdateRoleDto } from '../dto/update-role.dto'; +import { FindRolesDto } from '../dto/find-roles.dto'; +import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard'; +import { Permissions } from 'src/modules/auth/decorators/permissions.decorator'; import { RestId } from 'src/common/decorators'; import { AdminId } from 'src/common/decorators/admin-id.decorator'; @@ -31,7 +31,7 @@ export class RolesController { @ApiOperation({ summary: 'Get all permissions that the admin has' }) @ApiResponse({ status: 200, description: 'Permissions retrieved successfully' }) async findAllPermissions(@AdminId() adminId: string, @RestId() restId: string) { - const adminPermissionNames = await this.permissionService.getAdminPermissions(adminId, restId); + const adminPermissionNames = await this.permissionService.getFullAdminPermissions(adminId, restId); return adminPermissionNames; } diff --git a/src/modules/roles/providers/permissions.service.ts b/src/modules/roles/providers/permissions.service.ts index fd7938b..5ac99ae 100644 --- a/src/modules/roles/providers/permissions.service.ts +++ b/src/modules/roles/providers/permissions.service.ts @@ -75,6 +75,36 @@ export class PermissionsService { return permissions.flat().map(p => p.name); } + async getFullAdminPermissions(adminId: string, restId: string): Promise { + const admin = await this.adminRepository.findOne( + { id: adminId, roles: { restaurant: { id: restId } } }, + { populate: ['roles', 'roles.role', 'roles.role.permissions'] }, + ); + + if (!admin || !admin.roles) { + return []; + } + + // Ensure roles collection is loaded + await admin.roles.loadItems(); + + // Extract permission names as array of strings + const permissions = await Promise.all( + admin.roles + .getItems() + .filter(r => r.role) // Filter out any null/undefined roles + .map(async r => { + // Ensure permissions collection is initialized + if (!r.role.permissions.isInitialized()) { + await r.role.permissions.loadItems(); + } + return r.role.permissions.getItems(); + }), + ); + + return permissions.flat(); + } + /** * Invalidate admin permissions cache * @param adminId - The admin ID diff --git a/src/modules/roles/roles.module.ts b/src/modules/roles/roles.module.ts index 2399dbe..3367e3c 100644 --- a/src/modules/roles/roles.module.ts +++ b/src/modules/roles/roles.module.ts @@ -1,7 +1,7 @@ import { Global, Module } from '@nestjs/common'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { RolesService } from './providers/roles.service'; -import { RolesController } from './roles.controller'; +import { RolesController } from './controllers/roles.controller'; import { PermissionsService } from './providers/permissions.service'; import { Role } from './entities/role.entity'; import { Permission } from './entities/permission.entity';