我尝试同时使用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方法试图尝试解决。该应用程序正常加载,但它的行为就像没有经过身份验证一样。
答案 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;
}
});
})