Как стать автором
Обновить

Комментарии 3

  1. Ну тогда уж синтаксического сахара на СетМетадата не хватает:

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();
    }
  1. RoleGuard сделать глобальным

providers: [
        {
            provide: APP_GUARD,
            useClass: AuthGuard,
        },
        {
            provide: APP_GUARD,
            useClass: RolesGuard,
        },
    ],
  1. Ну и reflector лучше брать context.getHandler(), context.getClass() тогда можно на весь класс вешать.

Согласен, можно использовать и ваш подход. Более того, в технической документации от разработчика есть рекомендация использовать собственные декораторы (например, @Roles()). Спасибо за комментарий.

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];



Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории