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

Sharepoint 使用javascript客户端对象模型检查当前用户是否属于SP组,sharepoint,sharepoint-2010,sharepoint-2013,csom,Sharepoint,Sharepoint 2010,Sharepoint 2013,Csom,我没有找到如何获取当前用户并检查其是否属于特定sharepoint组的具体示例,因为我没有找到任何无法提供代码的内容 感谢您在正确方向上提供帮助。SharePoint 2013 CSOM 先决条件:仅自以下日期起与SharePoint 2013 CSOM API兼容 在中不可用 SharePoint 2010 如何通过CSOM(JavaScript)检查当前用户是否属于SharePoint组: 用法 IsCurrentUserMemberOfGroup("Approvers", function

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

感谢您在正确方向上提供帮助。

SharePoint 2013 CSOM 先决条件:仅自以下日期起与SharePoint 2013 CSOM API兼容 在中不可用 SharePoint 2010

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

用法

IsCurrentUserMemberOfGroup("Approvers", function (isCurrentUserInGroup) {
   if(isCurrentUserInGroup)
   {
      //...
   }
});
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());
      });
SharePoint 2010/2013 CSOM 用法

IsCurrentUserMemberOfGroup("Approvers", function (isCurrentUserInGroup) {
   if(isCurrentUserInGroup)
   {
      //...
   }
});
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());
      });

以下是使用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);
}

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

    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) 
                                                });

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

这仅在用户是SharePoint组的直接成员时有效,对吗?如果用户是广告组的成员,即SP组的成员,该怎么办?这可以通过JavaScript实现吗?没错。不幸的是,似乎无法确定用户是否是使用此方法的AD组的成员。只有一个executequery的第一种方法不适用于SP2013,“集合尚未初始化。尚未请求该集合,或者尚未执行该请求。可能需要显式请求该集合。”。你能否详细说明第一种方法,因为它似乎不适合我。有什么特别需要做的吗?当我尝试加载
用户的组时,访问被拒绝。用户是否需要有模拟步骤(不可用)来检查组中的用户?由于这是JSCOM,我无法进行模拟,可能最终不得不将其写入服务器端代码中。由此,我在该.userGroups.getEnumerator()上出现错误“无法读取未定义的属性”getEnumerator();在SharePoint基金会2013中,我得到了同样的错误,有人知道解决方案吗?