使用javascript客户端对象模型检查当前用户是否属于SP组

时间:2014-03-02 00:06:29

标签: sharepoint sharepoint-2010 sharepoint-2013 csom

我还没有找到如何获取当前用户然后检查它是否属于特定sharepoint组的具体示例,因为我找不到任何我无法提供代码的内容,

赞赏正确的方向。

3 个答案:

答案 0 :(得分:17)

SharePoint 2013 CSOM

  

先决条件:仅与SharePoint 2013 CSOM API兼容   SP.GroupCollection.getByName Method无效   SharePoint 2010

如何通过CSOM(JavaScript)检查当前用户是否属于SharePoint组:

function IsCurrentUserMemberOfGroup(groupName, OnComplete) {

        var currentContext = new SP.ClientContext.get_current();
        var currentWeb = currentContext.get_web();

        var currentUser = currentContext.get_web().get_currentUser();
        currentContext.load(currentUser);

        var allGroups = currentWeb.get_siteGroups();
        currentContext.load(allGroups);

        var group = allGroups.getByName(groupName);
        currentContext.load(group);

        var groupUsers = group.get_users();
        currentContext.load(groupUsers);

        currentContext.executeQueryAsync(OnSuccess,OnFailure);

        function OnSuccess(sender, args) {
            var userInGroup = false;
            var groupUserEnumerator = groupUsers.getEnumerator();
            while (groupUserEnumerator.moveNext()) {
                var groupUser = groupUserEnumerator.get_current();
                if (groupUser.get_id() == currentUser.get_id()) {
                    userInGroup = true;
                    break;
                }
            }  
            OnComplete(userInGroup);
        }

        function OnFailure(sender, args) {
            OnComplete(false);
        }    
}

<强>用法

IsCurrentUserMemberOfGroup("Approvers", function (isCurrentUserInGroup) {
   if(isCurrentUserInGroup)
   {
      //...
   }
});

SharePoint 2010/2013 CSOM

function isUserMemberOfGroup(userId, groupId, success,error) {

     var ctx = SP.ClientContext.get_current(); 
     var allGroups = ctx.get_web().get_siteGroups();
     var group = allGroups.getById(groupId);
     ctx.load(group,'Users');

     ctx.executeQueryAsync(
        function(sender, args) {
            var userInGroup = findUserById(group.get_users(),userId);
            success(userInGroup);
       },
       error);    

       var findUserById = function(users,id){
           var found = false;
           var e =  group.get_users().getEnumerator();
           while (e.moveNext()) {
                var user = e.get_current();
                if (user.get_id() == id) {
                    found = true;
                    break;
                }
           } 
           return found; 
       };
}

<强>用法

var currentUserId = _spPageContextInfo.userId;
var groupId = 4;
isUserMemberOfGroup(currentUserId, groupId, 
      function (isCurrentUserInGroup) {
          if(isCurrentUserInGroup)
              console.log('Current user is a member of Owners group'); 
          else
              console.log('Current user is not a member of Owners group'); 
      },
      function(sender,args){
         console.log(args.get_message());
      });

答案 1 :(得分:6)

这是使用SharePoint 2013的更快捷方式:

function CheckCurrentUserMembership() {

    var clientContext = new SP.ClientContext.get_current();
    this.currentUser = clientContext.get_web().get_currentUser();
    clientContext.load(this.currentUser);

    this.userGroups = this.currentUser.get_groups();
    clientContext.load(this.userGroups);
    clientContext.executeQueryAsync(OnQuerySucceeded);
}

function OnQuerySucceeded() {
         var isMember = false;
         var groupsEnumerator = this.userGroups.getEnumerator();
          while (groupsEnumerator.moveNext()) {
             var group= groupsEnumerator.get_current();               
             if(group.get_title() == "Administrator Group") {
                 isMember = true;
                 break;
             }
          }

          OnResult(isMember);
}

function OnQueryFailed() {
          OnResult(false);
}

答案 2 :(得分:2)

如果有人有兴趣。当您想要使用组名检查用户是否是组的成员时,可以使用此方法。

    var currentUserIsMemberOf = function(groupName){
      var found = false;
      var dfd = $.Deferred(function(){
         SP.SOD.executeOrDelayUntilScriptLoaded(function(){
            context = new SP.ClientContext.get_current();
            allGroups = context.get_web().get_siteGroups();
            context.load(allGroups);
            context.load(allGroups, 'Include(Users)');

            context.executeQueryAsync(
               function(){
                  var groupsEnumerator = allGroups.getEnumerator();
                  while (groupsEnumerator.moveNext()) {
                      var group = groupsEnumerator.get_current();               
                      if(group.get_title() == groupName) {
                          var usersEnumerator = group.get_users().getEnumerator();
                          while (usersEnumerator.moveNext()) {
                             var user = usersEnumerator.get_current();   
                             if(user.get_id() == _spPageContextInfo.userId) {
                                found = true;
                                break;
                             }
                          }
                      }
                   }
                  dfd.resolve(found);
               },
               function(){
                  dfd.reject(args.get_message());
               }
            );
         }, 'sp.js');
      });
      return dfd.promise();
   }

你可以这样使用

currentUserIsMemberOf("Members of Demo").done(function(result){ 
                                                  alert(result) 
                                                });

注意此代码使用Promise,您可以引用jQuery使用您自己的自定义Deferred对象或删除Deferred对象。