gpt4 book ai didi

AngularJS:检查用户 Angular 色以确定用户是否有权查看页面

转载 作者:行者123 更新时间:2023-12-02 23:20:35 25 4
gpt4 key购买 nike

我的身份验证机制有问题。我必须调用 API 来获取当前用户 Angular 色,然后检查它以确定用户可以查看我的应用程序的哪些页面。我的想法:在 myApp.run block 中调用 API,然后检查:

angular.module('MyApp')
.run(['$rootScope', 'authenService', '$location', function($rootScope, authenService, $location) {
var currentUser;

function checkRole() {
if(angular.isDefined(currentUser) && angular.isObject(currentUser) && ... && currentUser.isAdmin && $location.url() === '/dashboard') {
return true;
}
return false;
}
/*
** @name: getCurrentUser
** @description: get current user info, use promise $q
*/
authenService.getCurrentUser()
.then(function getSuccess(currentUserInfo){
currentUser = currentUserInfo;
//if user is not admin and current page is not dashboard page, redirect to dashboard page
if(!checkRole()) {
$location.path('/dashboard');
}
}, function getError(){});

//when user go to new path, check role if user have permission to access new page or not
$rootScope.$on('$routeChangeStart', function onRouteChange() {
if(!checkRole()) {
$location.path('/dashboard');
}
})
}];

我的问题:当 getCurrentUser API 正在进行时(仍然没有收到服务器的响应),代码 $rootScope.$on('$routeChangeStart') 被执行并始终将用户重定向到仪表板页面。我应该怎么办?您有任何想法/解决方案来解决这个问题吗?或者如何等待服务器的响应,然后运行 ​​UserCtrl Controller (当用户转到/user 时,UserCtrl 将在没有 checkRole 的情况下执行,因为尚未收到响应)。

EDIT

我真正想做的事情是当用户访问 mySite.com 时,我将调用 API 来获取用户 Angular 色。请求仍在进行中,但不知何故用户转到 mySite.com/#/user,用户页面立即显示在网页中(要求是用户在请求完成之前无法看到用户页面) 。请求完成后,如果用户没有权限,用户将被重定向到 mySite.com/#/dashboard。

SOLUTION

我显示加载屏幕来阻止我的应用程序,直到请求完成。感谢您的帮助。

最佳答案

尝试使用 $q 服务:

angular.module('MyApp')
.run(['$rootScope', 'authenService', '$location', '$q', function($rootScope, authenService, $location, $q) {
var currentUser;

function checkRole() {
var defered = $q.defer();
if(angular.isDefined(currentUser) && angular.isObject(currentUser)){
defered.resolve(currentUser.isAdmin && ($location.url() === '/dashboard'))
}else{
authenService.getCurrentUser().then(function getSuccess(currentUserInfo){
currentUser = currentUserInfo;
defered.resolve(currentUser.isAdmin && ($location.url() === '/dashboard'))
});
}
return defered.promise;
}

$rootScope.$on('$routeChangeStart', function onRouteChange() {
checkRole().then(function(isAdmin){
if(isAdmin) $location.path('/dashboard');
})
})
}];

关于AngularJS:检查用户 Angular 色以确定用户是否有权查看页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30188971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com