我正在尝试使用angular-permission和Satellizer来实现基于角色的身份验证功能。这个想法是让Satellizer从API和angular权限中获取一个令牌,以基于所述令牌来确定角色。
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方法。应用程序正常加载,但是它的行为就好像它没有经过身份验证一样。
发布于 2016-09-05 13:02:50
首先,看起来你忘了
return true;在$auth.isAuthenticated中。
为了调试,你能给我们一个柱塞的例子吗?我会在isAuthenticated中使用
console.log(store);检查权限存储数据。尝试:
PermPermissionStore.getStore();发布于 2017-06-16 21:27:48
您是否尝试将用户角色保存到后端satellizer JWT中的data key中,并通过$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;
}
});
})https://stackoverflow.com/questions/39322840
复制相似问题