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

如何检查用户是否属于sharepoint广告组或仅使用REST/Javascript?,javascript,jquery,rest,sharepoint,Javascript,Jquery,Rest,Sharepoint,如何检查当前用户是否属于sharepoint广告组,或者是否仅使用REST/Javascript?您可以使用以下函数来完成此操作: function IsCurrentUserMemberOfGroup(groupName, OnComplete) { var currentContext = new SP.ClientContext.get_current(); var currentWeb = currentContext.get_web(); var currentUser = curre

如何检查当前用户是否属于sharepoint广告组,或者是否仅使用REST/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);
}    
}
_isCurrentUserInGroup(20).then(function(result) 
{ console.log(result); //true or false. } ,
function (sender, args) { console.log(args.get_message(););
用法:

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

您可以尝试使用REST编码的方法

<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>

$(函数(){
isMember(“试验组”);
});
函数isMember(组名){
$.ajax({
url:_spPageContextInfo.webAbsoluteUrl+“/_api/web/sitegroups/getByName(“+groupName+”)/Users?$filter=Id eq”+_spPageContextInfo.userId,
方法:“获取”,
标题:{“Accept”:“application/json;odata=verbose”},
成功:功能(数据){
if(数据d.results[0]!=未定义){
//群居
}
其他的
{
//不存在
}
}
});
}

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

var clientContext = new SP.ClientContext();
var groupId = ...;  // my group Id
var group = clientContext.get_web().get_siteGroups().getById(groupId);
clientContext.load(group,"CanCurrentUserViewMembership");
clientContext.load(group,"CanCurrentUserManageGroup");
clientContext.executeQueryAsync(
function(sender,args){
    if(group.get_canCurrentUserViewMembership() == true)
        {
            if(group.get_canCurrentUserManageGroup() == false) // this check for group owners 
            {     //access denied logic
            }           
        }     
    },
    function(sender,args){   //failed   });

这可以通过以下功能实现

备注:它只适用于“当前用户”,但在许多情况下,这就足够了

我添加了Jquery承诺创建,因此需要Jquery,这样函数才能在IE11中工作)

可以这样称呼:

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);
}    
}
_isCurrentUserInGroup(20).then(function(result) 
{ console.log(result); //true or false. } ,
function (sender, args) { console.log(args.get_message(););

您需要知道组的id,但很容易检索。

我们使用node.js module
activedirectory
访问任何广告信息。但可能也有一个sharepoint库,我想你指的是sharepoint组,因为据我所知,没有所谓的sharepoint广告组。广告组与SharePoint没有任何关系,可以像添加普通用户一样从SP组中添加/删除这些组。不,它不是SharePoint组,我指的是安全组。在我的例子中,“除了外部用户以外的所有人”都可以访问。现在根据客户的要求,大约有100个用户,他们希望限制访问。为此,创建了一个拥有这100个用户的安全组。所以我想检查登录的用户是否属于该安全组。谢谢,但上述代码适用于SP组,而不是AD(安全)组。Rooney123如果要检查用户是否属于AD,则在web对象web.EnsureUsers()上有方法,如果在Active Directory中找不到具有指定logonName的用户,则会引发异常。唯一的问题是方法检查指定的登录名是否属于网站的有效用户,如果登录名不存在,则将其添加到网站。Ref:尝试为此查找REST API。是的,从服务器端我可以这样做,但我在SP online上,根据客户端限制,服务器端编码是不允许的。否则我想我已经做了一个服务并用JS调用了它。试试这个:如果你想检查一个具体的用户而不是当前的用户怎么办?