72 lines
1.9 KiB
TypeScript
72 lines
1.9 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Delete,
|
|
Get,
|
|
Param,
|
|
Post,
|
|
Put,
|
|
Req,
|
|
} from '@nestjs/common';
|
|
import type { AuthenticatedRequest } from '../auth/authenticated-request';
|
|
import { RequirePermissions } from '../auth/guards/require-permissions.decorator';
|
|
import { ApiError } from '../common/errors/api-error';
|
|
import { ErrorCode } from '../common/errors/error-codes';
|
|
import { SensitiveRateLimit } from '../common/rate-limit/sensitive-rate-limit.decorator';
|
|
import { Permission } from './permissions';
|
|
import { CreateRoleDto, UpdateRoleDto } from './dto/role.dto';
|
|
import { RolesService } from './roles.service';
|
|
|
|
@Controller('admin/roles')
|
|
export class AdminRolesController {
|
|
constructor(private readonly roles: RolesService) {}
|
|
|
|
@Get()
|
|
@RequirePermissions(Permission.RolesRead)
|
|
list() {
|
|
return this.roles.adminList();
|
|
}
|
|
|
|
@Get(':id')
|
|
@RequirePermissions(Permission.RolesRead)
|
|
get(@Param('id') id: string) {
|
|
return this.roles.adminGet(id);
|
|
}
|
|
|
|
@Post()
|
|
@RequirePermissions(Permission.RolesManage)
|
|
@SensitiveRateLimit()
|
|
create(@Req() req: AuthenticatedRequest, @Body() dto: CreateRoleDto) {
|
|
return this.roles.create(dto, this.requireUser(req));
|
|
}
|
|
|
|
@Put(':id')
|
|
@RequirePermissions(Permission.RolesManage)
|
|
@SensitiveRateLimit()
|
|
update(
|
|
@Req() req: AuthenticatedRequest,
|
|
@Param('id') id: string,
|
|
@Body() dto: UpdateRoleDto,
|
|
) {
|
|
return this.roles.update(id, dto, this.requireUser(req));
|
|
}
|
|
|
|
@Delete(':id')
|
|
@RequirePermissions(Permission.RolesManage)
|
|
@SensitiveRateLimit()
|
|
delete(@Req() req: AuthenticatedRequest, @Param('id') id: string) {
|
|
return this.roles.delete(id, this.requireUser(req));
|
|
}
|
|
|
|
private requireUser(req: AuthenticatedRequest) {
|
|
if (!req.user) {
|
|
throw new ApiError(
|
|
ErrorCode.Unauthorized,
|
|
'Bitte melden Sie sich an.',
|
|
401,
|
|
);
|
|
}
|
|
return req.user;
|
|
}
|
|
}
|