如何仅使用REST / Javascript检查用户是否属于sharepoint AD组?

时间:2017-04-27 10:02:21

标签: javascript jquery rest sharepoint

如何仅使用REST / Javascript检查当前用户是否属于sharepoint AD组?

4 个答案:

答案 0 :(得分:1)

目前,我通过在SP组中添加安全组然后检查以下代码中提到的属性来实现它。但唯一的问题是,我有大量的网站收集,所以无论我在哪里创建一个SP组&然后在其中添加我的安全组。

'-'

答案 1 :(得分:0)

您可以使用以下功能执行此操作:

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

用法:

function CheckUserGroup()
{
IsCurrentUserMemberOfGroup("YourGroupName", function (isCurrentUserInGroup) {
    if(isCurrentUserInGroup)
    {
        //Do something
    }
    else
    {
        //Do something else
    }
});
}

答案 2 :(得分:0)

您可以尝试使用REST编写此apporach。

<script src="https://code.jquery.com/jquery-1.11.2.min.js" type="text/javascript" ></script>

<script type="text/javascript">
$(function(){
    isMember("Test Group");
});

function isMember(groupName){
    $.ajax({
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/sitegroups/getByName('"+ groupName +"')/Users?$filter=Id eq " + _spPageContextInfo.userId,
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function(data){
            if(data.d.results[0] != undefined){
                // Exist in group
            }
            else
            {
                // Does not exist
            }
        }
    });
}
</script>

答案 3 :(得分:0)

这可以通过以下功能

来实现

备注:它仅适用于&#34;当前用户&#34;但在很多时候这已经足够了。

我添加了Jquery promise创建,因此需要Jquery,这是为了让函数在IE11中工作)

function _isCurrentUserInGroup(groupId) {
    var promise = $.Deferred(function () {
        var endpoint;
        endpoint = _spPageContextInfo.webAbsoluteUrl + "/_api/web/sitegroups(" + groupId + ")/CanCurrentUserViewMembership"
        jQuery.ajax({
            "url": endpoint,
            "type": "GET",
            "contentType": "application/json;odata=verbose",
            "headers": {
                "Accept": "application/json;odata=verbose"
            }
        }).then(function (result) {
            promise.resolve(result.d.CanCurrentUserViewMembership);
        }, function (sender, args) {
            console.log(args.get_message());
            soc_appinsights.appInsights.trackException(args.get_message());
            promise.reject(sender, args);
        });
    });
    return promise;
}

可以像这样调用:

_isCurrentUserInGroup(20).then(function(result) 
{ console.log(result); //true or false. } ,
function (sender, args) { console.log(args.get_message(););

您需要知道该组的ID,但可以轻松检索。