javascript - 在某个函数中包含函数
问题描述
我正在为我的角色守卫获取一个 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"
解决方案
所以我发现这个问题与角色保护代码无关。工作正常,问题在于角色名称不匹配。我和我的朋友解决了名称,一切正常。我有点尴尬,感谢您提供的所有帮助。
推荐阅读
- excel - Selenium Webdrive (VBA) - 查找元素的属性,其中有相同名称的重复属性
- python - 如何在没有正则表达式的情况下实现过滤 IPv4 地址的算法?
- python - 无法挖掘位于链接按钮下的某些信息
- google-sheets - 带有日期条件的 Google 表格 Sumifs
- html - 输入日期值属性django
- bash - 如何让您的 .bashrc 文件在第一个错误时退出而不将 errexit 标志继承到交互式 shell 中?
- php - 用于匹配三元组的正则表达式
- html - CSS网格:水平两列,但垂直翻转
- sql - Redshift SQL JOIN 对于一个 ID 的行为是不同的,并且当我们在谓词中有多个 ID 时会有所不同?
- php - 从我在 Laravel 的数据库中循环超过 1000 个条目需要很长时间