72 lines
2.1 KiB
TypeScript
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();
|
|
}
|
|
}
|