我正在为我的角色保护得到一个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"
答案 0 :(得分:0)
因此,我发现问题与角色保护代码无关。这样做很好,问题在于角色名称不匹配。我和我的朋友解析了名字,一切正常。我有点不好意思,谢谢您提供的所有帮助。