Comments 3
Ну тогда уж синтаксического сахара на СетМетадата не хватает:
import {SetMetadata} from '@nestjs/common';
export const ACCESS_ROLES_KEY = 'accessRoles';
export const Roles = (...args: string[]) => SetMetadata(ACCESS_ROLES_KEY, args);
Тогда красиво использовать:
@Roles(Role.Admin, Role.Pm)
@Get()
findAll() {
return this.dictionaryService.findAll();
}
RoleGuard сделать глобальным
providers: [
{
provide: APP_GUARD,
useClass: AuthGuard,
},
{
provide: APP_GUARD,
useClass: RolesGuard,
},
],
Ну и reflector лучше брать
context.getHandler(), context.getClass()
тогда можно на весь класс вешать.
const ROLE = {
ADMIN: 'admin',
USER: 'user',
SUPER_ADMIN: 'super-admin'
} as const;
const ROLE_INDEX = {
[ROLE.USER]: 0,
[ROLE.ADMIN]: 1,
[ROLE.SUPER_ADMIN]: 2
} as const;
const requiredRole = ROLE.ADMIN;
const currentRole = ROLE.USER;
const roleSupported = ROLE_INDEX[currentRole] >= ROLE_INDEX[requiredRole];
Sign up to leave a comment.
Внедрение Guards NestJS. Аутентификация и авторизация на основе ролей