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 { Controller, Get, Post, Body, Param, Patch, Delete, Query, UseGuards } from '@nestjs/common';
|
||||||
import { ApiTags, ApiOperation, ApiBody, ApiResponse, ApiBearerAuth } from '@nestjs/swagger';
|
import { ApiTags, ApiOperation, ApiBody, ApiResponse, ApiBearerAuth } from '@nestjs/swagger';
|
||||||
import { RolesService } from './providers/roles.service';
|
import { RolesService } from '../providers/roles.service';
|
||||||
import { PermissionsService } from './providers/permissions.service';
|
import { PermissionsService } from '../providers/permissions.service';
|
||||||
import { CreateRoleDto } from './dto/create-role.dto';
|
import { CreateRoleDto } from '../dto/create-role.dto';
|
||||||
import { UpdateRoleDto } from './dto/update-role.dto';
|
import { UpdateRoleDto } from '../dto/update-role.dto';
|
||||||
import { FindRolesDto } from './dto/find-roles.dto';
|
import { FindRolesDto } from '../dto/find-roles.dto';
|
||||||
import { AdminAuthGuard } from '../auth/guards/adminAuth.guard';
|
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
|
||||||
import { Permissions } from '../auth/decorators/permissions.decorator';
|
import { Permissions } from 'src/modules/auth/decorators/permissions.decorator';
|
||||||
import { RestId } from 'src/common/decorators';
|
import { RestId } from 'src/common/decorators';
|
||||||
import { AdminId } from 'src/common/decorators/admin-id.decorator';
|
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' })
|
@ApiOperation({ summary: 'Get all permissions that the admin has' })
|
||||||
@ApiResponse({ status: 200, description: 'Permissions retrieved successfully' })
|
@ApiResponse({ status: 200, description: 'Permissions retrieved successfully' })
|
||||||
async findAllPermissions(@AdminId() adminId: string, @RestId() restId: string) {
|
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;
|
return adminPermissionNames;
|
||||||
}
|
}
|
||||||
@@ -75,6 +75,36 @@ export class PermissionsService {
|
|||||||
return permissions.flat().map(p => p.name);
|
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
|
* Invalidate admin permissions cache
|
||||||
* @param adminId - The admin ID
|
* @param adminId - The admin ID
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Global, Module } from '@nestjs/common';
|
import { Global, Module } from '@nestjs/common';
|
||||||
import { MikroOrmModule } from '@mikro-orm/nestjs';
|
import { MikroOrmModule } from '@mikro-orm/nestjs';
|
||||||
import { RolesService } from './providers/roles.service';
|
import { RolesService } from './providers/roles.service';
|
||||||
import { RolesController } from './roles.controller';
|
import { RolesController } from './controllers/roles.controller';
|
||||||
import { PermissionsService } from './providers/permissions.service';
|
import { PermissionsService } from './providers/permissions.service';
|
||||||
import { Role } from './entities/role.entity';
|
import { Role } from './entities/role.entity';
|
||||||
import { Permission } from './entities/permission.entity';
|
import { Permission } from './entities/permission.entity';
|
||||||
|
|||||||
Reference in New Issue
Block a user