Files
aeroresolve_backend/src/modules/auth/roles.controller.ts
T

72 lines
2.1 KiB
TypeScript

import {
Body,
Controller,
Delete,
Get,
Param,
Patch,
Post,
UseGuards,
} from '@nestjs/common';
import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
import { RolesService } from './roles.service';
import { CreateRoleDto, UpdateRoleDto } from './dto/role.dto';
import { RequirePermissions } from './decorators/permissions.decorator';
import { PermissionsGuard } from './guards/permissions.guard';
@ApiTags('Roles & Permissions')
@Controller('roles')
@UseGuards(PermissionsGuard)
export class RolesController {
constructor(private readonly rolesService: RolesService) {}
@Get()
@RequirePermissions('roles:view')
@ApiOperation({ summary: 'List all roles with assigned user and permission counts' })
async findAll() {
return this.rolesService.findAll();
}
@Get(':id')
@RequirePermissions('roles:view')
@ApiOperation({ summary: 'Get role details with all assigned permissions' })
async findOne(@Param('id') id: string) {
return this.rolesService.findOne(id);
}
@Post()
@RequirePermissions('roles:create')
@ApiOperation({ summary: 'Create a new custom role with assigned permissions' })
async create(@Body() dto: CreateRoleDto) {
return this.rolesService.create(dto);
}
@Patch(':id')
@RequirePermissions('roles:edit')
@ApiOperation({ summary: 'Update role details and assigned permissions (System roles protected)' })
async update(@Param('id') id: string, @Body() dto: UpdateRoleDto) {
return this.rolesService.update(id, dto);
}
@Delete(':id')
@RequirePermissions('roles:delete')
@ApiOperation({ summary: 'Delete custom role (System roles & roles with active users protected)' })
async remove(@Param('id') id: string) {
return this.rolesService.remove(id);
}
}
@ApiTags('Permissions')
@Controller('permissions')
@UseGuards(PermissionsGuard)
export class PermissionsController {
constructor(private readonly rolesService: RolesService) {}
@Get()
@RequirePermissions('roles:view')
@ApiOperation({ summary: 'List all available system permissions categorized by module and group' })
async findAll() {
return this.rolesService.findAllPermissions();
}
}