Включить функцию в некоторую функцию - PullRequest
0 голосов
/ 24 октября 2018

Я получаю объект 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"

1 Ответ

0 голосов
/ 25 октября 2018

Итак, я обнаружил, что проблема не имеет ничего общего с кодом защиты роли.Это работает нормально, проблема была в несоответствии имен ролей.Мы с другом решили имена, и все работает нормально.Я немного смущен, Спасибо за всю оказанную помощь.

...