AngularJS授权,解决angular权限前的承诺,检查权限
AngularJS authorization, resolve promise before angular permissions, check for permission
我正在使用 angular-权限库。我在 运行():
中定义了一些权限
PermPermissionStore
.definePermission('isAuthorize', function () {
console.log('isAuthorize', OAuth.isAuthenticated());
return OAuth.isAuthenticated();
});
然后我在 routes.js
中检查用户权限
.state('app.main', {
abstract: true,
template: '<ui-view></ui-view>',
data: {
permissions: {
only: ['isAuthorize'],
redirectTo: {
default: 'login'
}
}
}
})
但我需要在每次刷新页面时首先请求 profileData,并且权限检查需要在我 resolve promise 之后 运行。我已经尝试像这样在父状态上添加 resolve,但它仍然首先请求 app.main 的许可,然后 promise 正在被解决。
.state('app', {
abstract: true,
template: '<ui-view></ui-view>',
controller: function ($rootScope, userData) {
$rootScope.roles = userData.user.roles;
},
resolve: {
userData: ["ProfileFactory", function (ProfileFactory) {
return ProfileFactory
.get()
.$promise;
}]
}
})
我没有使用过angular权限模块。但是如果你使用 ui.router 的话,你自己实现起来就很容易了。这是文档中的示例。
https://ui-router.github.io/docs/latest/classes/transition.transition-1.html#onbefore
onBefore 钩子的使用示例
.run(($transitions, $state, $injector) => {
$transitions.onBefore({
to: 'app.**'
}, () => {
const $window = $injector.get('$window');
if (!$window.sessionStorage.getItem('user')) {
return $state.target('login', $state.transition.params());
}
return true
});
});
如果没有以 test@gmail.com 和密码 123 登录,您将无法访问主页
我正在使用 angular-权限库。我在 运行():
中定义了一些权限 PermPermissionStore
.definePermission('isAuthorize', function () {
console.log('isAuthorize', OAuth.isAuthenticated());
return OAuth.isAuthenticated();
});
然后我在 routes.js
中检查用户权限 .state('app.main', {
abstract: true,
template: '<ui-view></ui-view>',
data: {
permissions: {
only: ['isAuthorize'],
redirectTo: {
default: 'login'
}
}
}
})
但我需要在每次刷新页面时首先请求 profileData,并且权限检查需要在我 resolve promise 之后 运行。我已经尝试像这样在父状态上添加 resolve,但它仍然首先请求 app.main 的许可,然后 promise 正在被解决。
.state('app', {
abstract: true,
template: '<ui-view></ui-view>',
controller: function ($rootScope, userData) {
$rootScope.roles = userData.user.roles;
},
resolve: {
userData: ["ProfileFactory", function (ProfileFactory) {
return ProfileFactory
.get()
.$promise;
}]
}
})
我没有使用过angular权限模块。但是如果你使用 ui.router 的话,你自己实现起来就很容易了。这是文档中的示例。
https://ui-router.github.io/docs/latest/classes/transition.transition-1.html#onbefore
onBefore 钩子的使用示例
.run(($transitions, $state, $injector) => {
$transitions.onBefore({
to: 'app.**'
}, () => {
const $window = $injector.get('$window');
if (!$window.sessionStorage.getItem('user')) {
return $state.target('login', $state.transition.params());
}
return true
});
});
如果没有以 test@gmail.com 和密码 123 登录,您将无法访问主页