卫星和角度许可互操作

时间:2016-09-05 01:20:02

标签: angularjs

我尝试同时使用angular-permission和Satellizer进行基于角色的身份验证功能。我们的想法是让Satellizer从API获取令牌,并使用angular-permission来确定基于所述令牌的角色。

app.js:

.run(function(PermRoleStore, $auth) {
    PermRoleStore.defineManyRoles({
        'USER' : function() { return $auth.isAuthenticated('USER'); },
        'ADMIN' : function() { return $auth.isAuthenticated('ADMIN'); }
    });
    console.log(PermRoleStore.getStore());
})


.config(function ($authProvider, $stateProvider) {

        // USER AUTHORIZED STATES
        $stateProvider.state('Dashboard', {
            url: '/dashboard',
            templateUrl: 'views/dashboard.html',
            controller: 'Dashboard',
            data: {
                permissions: {
                    only: ['USER'],
                    redirectTo: function() {
                        return {
                            state: 'signup',
                            options: {
                                reload: true
                            }
                        };
                    }
                }
            }
        })
});

$ auth.isAuthenticated:

    isAuthenticated = function(roleArg) {
      var token = storage.get(tokenName);

      if (roleArg === null || 'undefined') {
        roleArg = 'ANONYMOUS';
      }

      var role = token.role;
      if (roleArg != role) {
        console.log('role: ' + role);
        console.log('roleArg: ' + roleArg);
        console.log('Permission denied');
        return false;
      } else {
        return true;
    };

我遇到的问题是我甚至没有看到PermRoleStore方法试图尝试解决。该应用程序正常加载,但它的行为就像没有经过身份验证一样。

2 个答案:

答案 0 :(得分:0)

首先,看起来你好像忘了

return true;
$auth.isAuthenticated中的

对于调试,你能给我们一个有关的例子吗?我将使用

isAuthenticated内部进行调试
console.log(store);

检查权限存储数据。 尝试:

PermPermissionStore.getStore();

答案 1 :(得分:0)

您是否尝试将用户角色保存到后端的卫星JWT中的数据密钥,并通过$auth.getPayload()功能访问该JWT数据。

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

  if ($auth.getPayload().data.role === 'ADMIN') {
    return true;
  }
  else {
    return false;
  }
}
else {
  return false;
}
});
})