Здравствуйте!
Я указал на декоратор в одном маршруте, но он вообще не работал. Затем я подключил guard к модулю, как показано в документации. Теперь guard обрабатывает любой запрос. по любому маршруту, даже там где нет декоратора
Так ли это должно быть?
Не могли бы вы подсказать мне, как я могу заставить декоратор работать только на тех маршрутах, где присутствует декоратор?
export const Permissions = (...permissions: PermissionEnum[]) =>
SetMetadata('permissions', permissions);
@Injectable()
export class PermissionGuard implements CanActivate {
constructor(private reflector: Reflector) {}
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const requirePermissions = this.reflector.getAllAndOverride<
PermissionEnum[]
>('permissions', [context.getHandler(), context.getClass()]);
console.log(requirePermissions, 'requirePermissions');
if (!requirePermissions) {
throw new HttpException(
lang.ru.http_exceptions.forbidden,
HttpStatus.FORBIDDEN,
);
}
const user = context.switchToHttp().getRequest();
//console.log(context.switchToHttp(), 'switchToHttp');
//console.log(context.switchToHttp().getRequest(), 'getRequest');
return false;
}
}
@HttpCode(201)
@UseGuards(JwtAuthGuard)
@Permissions(PermissionEnum.USER_VIEW)
@Get('/users')
getAll(@Query() query: AdminUserQueryDto) {
return this.adminService.getUsers(query);
}
@Module({
...
providers: [RoleService, { provide: APP_GUARD, useClass: PermissionGuard }],
...
})
export class RoleModule {}