Я пытаюсь использовать как угловое разрешение, так и функцию Satellizer для проверки подлинности на основе ролей. Идея заключается в том, что Satellizer должен получить маркер от API и угловое разрешение для определения роли, основанной на указанном токене.
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 пытаются попытаться решить. Приложение загружается нормально, однако оно действует так, как будто оно не аутентифицировано.
Попробовали ли вы сохранить роль пользователя в ключе данных в сателлитеторе JWT на бэкэнд и получить доступ к этим данным JWT через $auth.getPayload()
.
.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;
}
});
})
Прежде всего, похоже, что вы забыли
return true;
в $auth.isAuthenticated
.
Для отладки вы можете дать нам пример plunker? Я бы отлаживал внутри isAuthenticated
with
console.log(store);
для проверки данных хранилища разрешений. Пытаться:
PermPermissionStore.getStore();
PermPermissionStore.getStore()
чтобы проверить, установлены ли ваши разрешения изначально