perms
This commit is contained in:
+8
-8
@@ -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,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';
|
||||
|
||||
Reference in New Issue
Block a user