用户的权限包含在数组中,就像我通过迭代arrat来验证他是否有访问权限一样
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;
}{
path: 'profile',
component: ProfileComponent,
canActivate: [RoleGuard],
data: {
expectedPermission: 'read:user'
}
}发布于 2020-02-20 16:35:05
您需要查看expectedPermission是否存在于permissions数组中。
有几种方法可以做到这一点。如果保证字符串完全匹配(相同的情况),则可以使用includes数组函数。
if (!this.auth.isAuthenticated() || !permissions.includes(expectedPermission)) {
// user doesn't have permission
}发布于 2020-02-20 16:44:02
您的问题是,您正在比较数组的引用,这可能不是您想要的。
您应该检查所有的expectedPermissions是否都存在于permissions中。这可以通过组合every和includes函数来实现:
if (!this.auth.isAuthenticated() || !expectedPermission.every(expectedPermission => permissions.includes(expectedPermission))) {
//no permission
}在expectedPermissions数组上的每个循环,只有当给定的谓词对于每个项都是真时,才返回true。我们使用的谓词是检查项是否包含在权限数组中。
https://stackoverflow.com/questions/60324509
复制相似问题