Я получаю объект json для моей ролевой охраны и пытаюсь проверить, есть ли у пользователя набор ролей, одна из которых входит в список принятых ролей для действия.У меня есть функция, настроенная следующим образом:
export class RoleGuard implements CanActivate{
constructor (private readonly reflector: Reflector, readonly jwtService: JwtService) {}
public canActivate(context: ExecutionContext): boolean {
const roles = this.reflector.get<string[]>('groups', context.getHandler());
if (!roles) {
return true;
}
const request = context.switchToHttp().getRequest();
const user: any = this.jwtService.decode(request.headers.authorization.substr(7), { json: true, complete: true });
// tslint:disable-next-line:ter-arrow-parens
const hasGroup = () => user.payload.groups.some((role: any) => roles.includes(role));
return user && user.payload.groups && hasGroup();
user.payload.groups - это массив ролей, которые есть у пользователя, а «role» - это список принятых ролей, которые могут выполнять действие.Однако каждый раз, когда программа запускается, она терпит неудачу даже с правильной ролью.Что здесь происходит, чего я не вижу?Я получил это из документации с сайта nestjs: https://docs.nestjs.com/guards
пример для объекта групп:
Array(3) ["role1", "role2", "role3"]
length:3
__proto__:Array(0) [, …]
0:"role1"
1:"role2"
2:"role3"
пример для объекта ролей:
Array(2) ["role4", "role3"]
length:2
__proto__:Array(0) [, …]
0:"role4"
1:"role3"