Проверьте, принадлежат ли текущие пользователи группе SP, используя javascript Client Side Object Model

Я havent нашел конкретный пример того, как получить текущего пользователя, а затем проверить, принадлежит ли он определенной группе sharepoint, поскольку я не нашел ничего, что я не могу предоставить код,

помощь в правильном направлении.

Ответ 1

SharePoint 2013 CSOM

Предварительные требования: совместимость с API-интерфейсом SharePoint 2013 CSOM только с Метод SP.GroupCollection.getByName не доступен в SharePoint 2010

Как проверить, принадлежит ли текущий пользователь группе SharePoint через CSOM (JavaScript):

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

Ответ 2

Вот более быстрый способ с 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);
}

Ответ 3

Если кому-то интересно. Этот подход можно использовать, если вы хотите проверить, является ли пользователь членом группы с использованием имени группы.

    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, используя собственный пользовательский объект "Отложенный" или удалить объект "Отложенные".