首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数组读取访问权限

从数组读取访问权限
EN

Stack Overflow用户
提问于 2020-02-20 16:27:55
回答 2查看 221关注 0票数 0

用户的权限包含在数组中,就像我通过迭代arrat来验证他是否有访问权限一样

代码语言:javascript
复制
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { 

   const expectedPermission = route.data.expectedPermission;
   const token= localStorage.getItem("Token")
   const tokenPayload = decode(token);
   const role=tokenPayload['https://menu-api.demo.com/roles'][0];
   console.log(route);
   const permissions=["create:user", "delete:user", "read:user"]
     if (!this.auth.isAuthenticated() || permissions !== expectedPermission) {
       this.router.navigate(['external-api']);
         return false;
     }

   return true;
 }

代码语言:javascript
复制
{
    path: 'profile',
    component: ProfileComponent,
    canActivate: [RoleGuard], 
    data: { 
      expectedPermission: 'read:user'
    }
  }
EN

回答 2

Stack Overflow用户

发布于 2020-02-20 16:35:05

您需要查看expectedPermission是否存在于permissions数组中。

有几种方法可以做到这一点。如果保证字符串完全匹配(相同的情况),则可以使用includes数组函数。

代码语言:javascript
复制
if (!this.auth.isAuthenticated() || !permissions.includes(expectedPermission)) {
  // user doesn't have permission
}
票数 1
EN

Stack Overflow用户

发布于 2020-02-20 16:44:02

您的问题是,您正在比较数组的引用,这可能不是您想要的。

您应该检查所有的expectedPermissions是否都存在于permissions中。这可以通过组合everyincludes函数来实现:

代码语言:javascript
复制
if (!this.auth.isAuthenticated() || !expectedPermission.every(expectedPermission => permissions.includes(expectedPermission))) {
 //no permission
}

expectedPermissions数组上的每个循环,只有当给定的谓词对于每个项都是真时,才返回true。我们使用的谓词是检查项是否包含在权限数组中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60324509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档