角度权限定义通过 API 检索的权限



我正在尝试使用角度权限来实现基于权限的身份验证,但我不知道在哪里定义那些通过需要基于令牌的访问的 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检索的权限。这一切都清楚了。

所以我有两个模块。一个是处理用户登录的身份验证模块。另一个是处理权限验证的权限模块。在权限模块 .run(( 阶段,我定义的权限如下:

    var getPermissions = function () {
        var deferred = $q.defer();
        system.permissions.get(
            function () {
                return deferred.resolve(system.permissions._permissions);
            },
            function (error) {
                console.log("error if can't load permissions");
                console.log(error);
            }
        );
        return deferred.promise;
    };
    var loadPermissions = function () {
        var promise = getPermissions();
        promise.then(function (permissions) {
            var arrayPermissions = formatPermissionArray(permissions);
            //var arrayPermissions=['viewSeed','viewAuthentication'];
            PermissionStore.defineManyPermissions(arrayPermissions, checkPermission);
            console.log("from permission run service");
            console.log(arrayPermissions);
        }, function (reason) {
            console.log('Failed: ' + reason);
        }, function (update) {
            console.log('Got notification: ' + update);
        });
    };
    loadPermissions();
    var formatPermissionArray = function (sourceData) {
        var formatedPermissionArray = [];
        for (var i = 0; i < sourceData.length; i++) {
            formatedPermissionArray.push(sourceData[i].permissionId);
        };
        return formatedPermissionArray;
    };

但是在应用程序的引导过程中,此模块已经加载,并且由于用户尚未登录,arrayPermissions将为空。

我尝试使用 oclazyload 从身份验证模块的登录控制器加载权限模块,这实际上有效,但如果用户刷新/重新加载他们的页面,权限模块将不再加载。

我是Web开发的新手,也是AngularJs的新手。短短几个月的经验。我不知道我是否以完全错误的方式这样做。

我的问题是:

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

  2. 如果我应该保护我的 api,我应该如何解决我上面描述的问题,那就是在哪里定义角度权限以及如何使用 API 检索权限。

我希望我已经设法清楚地描述了我的问题。任何帮助或指导将不胜感激。

问候罗拉

我正在使用带有角度satellizer的角度权限。 PermRoleStorePermPermissionStore需要位于run块中。您可以将数据添加到 JSON WEB 令牌添加,像我一样在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;
}
});
})

最新更新