0
我正在使用AngularJS构建SharePoint应用程序,并且试图定义一个检索用户是否是管理员的服务。服务本身按预期成功记录/工作,但我不确定如何在控制器中使用它。我的最终目标是,当加载一个与控制器绑定的页面时,该服务会检查它们是否为管理员。从那时起,我可以做各种魔术(例如重定向等)。这里是我的服务:使用AngularJS服务来检查用户是否具有管理员权限
// Check if user is an admin
appServices.factory('appAdminCheck', ['$resource', 'appCurrentUserProfile', 'appAdmins', function ($resource, appCurrentUserProfile, appAdmins) {
var userAdmin = [];
appCurrentUserProfile.query(function (usercheck) {
var userID = usercheck.Id;
appAdmins.query(function (admins) {
var admins = admins.value; // Data is within an object of "value", so this pushes the server side array into the $scope array
// Foreach type, push values into types array
angular.forEach(admins, function (adminvalue, adminkey) {
if (adminvalue.Admin_x0020_NameId == userID) {
userAdmin = true;
console.log("I'm an Admin" + userAdmin);
}
});
});
});
return userAdmin;
}]);
更新:经仔细检查,我想返回值的数组,但它一直声称数组长度为0。我相信这是因为我不是“返回”正确。
这里是我的更新服务:
appServices.factory('appAdminCheck', ['$resource', 'appCurrentUserProfile', 'appAdmins', function ($resource, appCurrentUserProfile, appAdmins) {
var userAdmin = [];
var checkUser = function() {
appCurrentUserProfile.query(function (usercheck) {
var userID = usercheck.Id;
appAdmins.query(function (admins) {
var admins = admins.value; // Data is within an object of "value", so this pushes the server side array into the $scope array
// Foreach type, push values into types array
angular.forEach(admins, function (adminvalue, adminkey) {
if (adminvalue.Admin_x0020_NameId == userID) {
userAdmin.push({
isAdmin: 'Yes',
role: adminvalue.Role,
});
}
});
});
});
return userAdmin;
}
return {
checkUser: checkUser
};
}]);
这里是控制器的日志调用:
var test = appAdminCheck.checkUser();
console.log(test);
我相信这是接近,它让指出userCheck是不确定的,但我学习很多关于服务。 – Kode 2015-03-25 01:37:35
谢谢菲尔。任何想法如何让它返回一个值,比如我的更新后的角色的角色?无论哪种情况,我都学到了很多东西。 – Kode 2015-03-25 03:46:08
@Kode只需在最内层的承诺分辨率 – Phil 2015-03-25 04:12:23