Angular-permission定义通过API检索的权限

lol*_*ola 5 permissions angularjs

亲爱的堆栈溢出,

我正在尝试使用angular-permission来实现基于权限的身份验证,但我不知道在哪里定义那些通过API从我的后端检索的权限,这需要基于令牌的访问.

首先,让我介绍一下我的应用程序的外观.在我的后端,我的系统门户,我定义了允许调用不同API的权限.权限不会一直在变化.仅当我添加新功能(API)时,才会添加新权限.例如.permission1:api1,api2,api3 permission2:api4,api5,api6 permission3:api7,api8,api9

在前端,客户登录前端Web门户并自行创建自定义角色,将一些权限组合在一起,例如:admin:permission1,permission2,permission3 auditor:permission 3

角度权限文档说(https://github.com/Narzerus/angular-permission/blob/development/docs/1-manging-permissions.md#multiple-permissions)我可以使用PermissionStore.defineManyPermissions来定义权限用户登录后从API检索.这一切都很清楚.

所以我有两个模块.一个是处理用户登录的身份验证模块.另一个是Permission模块,它处理权限验证.在Permission模块.run()阶段,我定义了这样的权限:

permission1: api1,api2,api3
permission2:api4,api5,api6
permission3:api7,api8,api9
Run Code Online (Sandbox Code Playgroud)

但是在应用程序的引导期间,此模块已经加载,并且arrayPermissions将为空,因为用户尚未登录.

我尝试使用oclazyload从Authentication模块的登录控制器加载Permission模块,这实际上有效,但如果用户刷新/重新加载他们的页面,将不再加载Permission模块.

我是webdevelpment的新手,也是angularjs的新手.短短几个月的经历.我不知道我是否以完全错误的方式做到这一点.我的问题是:

  1. 用于查找权限列表的API应该要求身份验证吗?因为我需要将这些身份验证放在UI路由器路由上.无论如何,任何人都可以看到它 如果我不应该保护该API,那么我的问题就解决了.

  2. 如果我应该保护我的api,我应该如何解决上面描述的问题,哪些是定义angular-perrmission的权限以及如何使用API​​来检索权限.

我希望我能清楚地描述我的问题.非常感谢任何帮助或指导.

问候,萝拉

小智 1

我正在将角度许可与角度卫星一起使用。PermRoleStore或者PermPermissionStore需要处于run阻塞状态。您可以将数据添加到 JSON WEB TOKEN,并像我一样在块中使用它run

$auth.getPayload()此函数从 localStorage 中的 JWT 返回有效负载。在该有效负载中,它包含我在后端保存的带有角色密钥的数据。我希望这对您的问题有所帮助。

.run(function (PermRoleStore, $auth, Yollar) {
PermRoleStore    
.defineRole('ADMIN', function () {
  if($auth.getPayload()) {

  if ($auth.getPayload().data.role === 'ADMIN') {
    return true;
  }
  else {
    return false;
  }
}
else {
  return false;
}
});
PermRoleStore    
.defineRole('MODERATOR', function () {
  if($auth.getPayload()) {

  if ($auth.getPayload().data.role === 'MODERATOR') {
    return true;
  }
  else {
    return false;
  }
}
else {
  return false;
}
});
})
Run Code Online (Sandbox Code Playgroud)