Friday 19 October 2012

How To Check Whether Current User Belongs To A Certain Group Using JavaScript

Using JavaScript Client Object Model:
 
function isCurrentUserInGroup(groupName, functionUserInGroup, functionUserNotInGroup, functionGroupNotFound, functionOnError) {
    var ctx = new SP.ClientContext.get_current();
    //Get info of current user
    var currentUser = ctx.get_web().get_currentUser();
    ctx.load(currentUser, 'Id', 'LoginName');
    //Retrieve all site groups
    var groups = ctx.get_web().get_siteGroups();
    ctx.load(groups);
 
    ctx.executeQueryAsync(function (sender, args) {
        //See whether the group exists
        var groupFound = false;
        var groupEnumerator = groups.getEnumerator();
        while (groupEnumerator.moveNext() && !groupFound) {
            var group = groupEnumerator.get_current();
            if (group.get_title() == groupName) {
                //Found the group, now try to load users of this group
                groupFound = true;
                var users = group.get_users();
                ctx.load(users);
                ctx.executeQueryAsync(function (sender, args) {
                    //See whether the user exists
                    var userFound = false;
                    var userEnumerator = users.getEnumerator();
                    while (userEnumerator.moveNext() && !userFound) {
                        var user = userEnumerator.get_current();
                        if (user.get_id() == currentUser.get_id()) {
                            //User exists in the group
                            userFound = true;
 
                            if (functionUserInGroup != null)
                                functionUserInGroup();
                        }
                    }
 
                    //User doesn't exist in the group
                    if (!userFound && (functionUserNotInGroup != null))
                        functionUserNotInGroup();
 
                }, function (sender, args) {
                    if (functionOnError != null)
                        functionOnError(sender, args);
 
                });
            }
        }
 
        //Group doesn't exist
        if (!groupFound && (functionGroupNotFound != null))
            functionGroupNotFound();
 
    }, function (sender, args) {
        if (functionOnError != null)
            functionOnError(sender, args);
 
    })
 
}
 
// Sample usage 
ExecuteOrDelayUntilScriptLoaded(function () {
    isCurrentUserInGroup('Approvers',
                         function () {
                            alert('User is in the group.');
                         },
                         function () {
                            alert('User is NOT in the group.');
                         },
                         function () {
                             alert('Group does NOT exist.');
                         },
                         function (sender, args) {
                             alert('Request failed.' + args.get_message() + '\n' + args.get_stackTrace());
                         });
}, "sp.js");
 

No comments:

Post a Comment