【问题标题】:Include function inside a some function在某个函数中包含函数
【发布时间】:2019-03-29 03:37:15
【问题描述】:

我正在为我的角色守卫获取一个 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 是用户拥有的角色数组,“roles”是可以执行操作的接受角色列表。但是,每次程序运行时,即使角色正确,它也会失败。这里发生了什么我没有看到的事情?我从 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"

【问题讨论】:

  • 这两个数组只包含字符串还是角色对象?可能,您是在比较对象而不是字符串。
  • 感谢您提出问题!由于您遇到代码问题,请查看minimal reproducible example 的构成,以便您获得有意义的答案。
  • 您能否提供一个role 对象的示例
  • 你肯定面临另一个问题。
  • 不要编辑您的问题,而是发布您的解决方案作为答案并接受它,以便其他人可以看到您的问题已解决。 :-)

标签: javascript typescript nestjs


【解决方案1】:

所以我发现这个问题与角色保护代码无关。工作正常,问题在于角色名称不匹配。我和我的朋友解决了名称,一切正常。有点不好意思,谢谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-10
    • 2021-03-26
    • 2021-03-25
    • 2013-06-12
    • 2012-02-27
    • 2014-12-02
    • 2010-10-17
    • 1970-01-01
    相关资源
    最近更新 更多