This commit is contained in:
2025-11-22 12:08:30 +03:30
parent 685aee494a
commit aa13cdcbba
3 changed files with 39 additions and 9 deletions
@@ -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;
}
@@ -75,6 +75,36 @@ export class PermissionsService {
return permissions.flat().map(p => p.name);
}
async getFullAdminPermissions(adminId: string, restId: string): Promise<Permission[]> {
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
+1 -1
View File
@@ -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';