路由提供程序解析不使用 parse.com 限制访问



我想将页面限制为仅管理员。我发现我的身份验证工厂在解析返回路由答案之前未完成。当我关注/观察代码路径页面在工厂完成之前加载时。 我认为我需要在承诺和/或".then()"方面做得更好。

任何帮助将不胜感激。谢谢

我的路线代码:

.when("/admin", {
templateUrl : "templates/admin.htm",
controller: 'AdminCtrl',
resolve : {
'auth' : function(AuthService){
return AuthService.isAdmin();
}
}
}).run(function($rootScope, $location){
$rootScope.$on('$routeChangeError', function(event, current, previous, rejection){
if(rejection === 'Not Administrator'){
$location.path('/404');
}
if(rejection === 'Not Authenticated'){
$location.path('/404');
}
});
});

我的工厂:

app.factory('AuthService', function($q){
var isAuthenticated = Parse.User.current();
var isAdmin = undefined;
var currentUser = Parse.User.current();
return {
authenticate : function(){
if(isAuthenticated){
return true;
} else {
return $q.reject('Not Authenticated');
}
},
isAdmin : function(){
if(isAuthenticated){
userHasRole(currentUser, "Administrator").then(function(isRole) {
console.log((isRole)? "user is admin" : "user is not admin");
isAdmin = isRole;
return isAdmin;
}).then(function(isAdmin){
if(isAdmin){
return true;
} else {
return $q.reject('Not Administrator');
}
});
} else {
return $q.reject('Not Authenticated');
}
}
};
});  
function userHasRole(user, roleName) {
var query = new Parse.Query(Parse.Role);
query.equalTo("name", roleName);
query.equalTo("users", user);
return query.find().then(function(roles) {
if(roles.length > 0){
return true;
}else{
return false;
}
});
}

如此接近。

isAdmin返回未定义,因为您在userHasRole之前缺少 return 语句,所以您调用它,但随后isAdmin在没有返回值的情况下命中if( isAuthenticated )块的末尾,因为它不知道它应该返回userHasRole的结果。

最新更新