2015-10-16 81 views
7

我们已经将AD组添加到SharePoint用户组。现在,当我们用户登录时,我们想要检查已登录AD用户的权限。用户是嵌套在SharePoint组中的AD组的一部分如何将广告用户与SharePoint组关联

  1. 我在SharePoint中添加了广告组(示例)管理器。
  2. 现在我想显示一些URL链接只有组(经理)。
  3. 当用户登录时,如何检查用户是否是经理? (使用 CSOM或JSOM)
+0

你可以指定更多吗?您向(示例)“Site Visitors”SharePoint权限级别组添加了一个活动目录组。现在你想检查什么,什么地点和什么时候的权限?如何?编程或SharePoint管理员设置或什么? – Eric

+0

1)我在SharePoint中添加了广告组(示例)管理员。 2)现在我想显示一些URL链接只有组(经理)。 3)当用户登录时,如何检查用户是否是管理员?(使用CSOM或JSOM) –

+0

对于这种情况,您不需要自己检查组成员身份;您可以使用名为受众群体定位的内置SharePoint功能来限制谁可以在页面上看到各个Web部件。 – Thriggle

回答

7

不幸的是,你会在服务器端代码中使用了这个SPGroup.ContainsCurrentUser属性不是通过JavaScript客户端对象模型(至少在SP2010和2013年)访问。

方法1:使用组成员的知名度作为一种解决方法

一个潜在的解决办法是利用两个属性的组合,你可以通过JavaScript客户端对象模型的群体访问:OnlyAllowMembersViewMemberhipCanCurrentUserViewMembership

如果当前用户可以查看只设置为允许组成员这样做的组的组成员资格,那么我们可以假设用户是组成员。

var clientContext = new SP.ClientContext(); 
var groupId = 5; // the group membership ID for the group you want to check 
var group = clientContext.get_web().get_siteGroups().getById(groupId); 
clientContext.load(group,"CanCurrentUserViewMembership"); 
clientContext.load(group,"OnlyAllowMembersViewMembership"); 
clientContext.executeQueryAsync(
    function(sender,args){ 
     var isMemberOfGroup = group.get_canCurrentUserViewMembership() && group.get_onlyAllowMembersViewMembership(); 
     if(isMemberOfGroup){ 
      doSomething(); 
     } 
    }, 
    function(sender,args){"Whoops! "+alert(args.get_message());} 
); 

,如果你已经设置的团体只有会员可见这种做法只会工作,它会始终返回一个误报,如果你有升高的访问,如如果你是一个网站集管理员或组所有者。

编辑:如何通过所有网站用户组

重述。如果您要应用与上述相同的逻辑来检查网站上的当前用户的所有组成员资格(而不是通过其ID指定组),您可以使用下面修改的JavaScript代码。

var clientContext = new SP.ClientContext(); 
var groups = clientContext.get_web().get_siteGroups() 
clientContext.load(groups,"Include(CanCurrentUserViewMembership,OnlyAllowMembersViewMembership,Title)"); 
clientContext.executeQueryAsync(
function(sender,args){ 
    var groupIterator = groups.getEnumerator(); 
    var myGroups = []; 
    while(groupIterator.moveNext()){ 
     var current = groupIterator.get_current(); 
     var isMemberOfGroup = current.get_canCurrentUserViewMembership() && current.get_onlyAllowMembersViewMembership(); 
     if(isMemberOfGroup){ 
      myGroups.push(current.get_title()); // this example adds group titles to an array 
     } 
    } 
    alert(myGroups); // show the array 
},function(sender,args){"Whoops! "+alert(args.get_message());}); 

选项2:使用群体定位为一种变通方法

当然,正如我在评论中提到,为你的要求,你可能甚至不需要组成员的编程访问。您只需在网络部分上设置受众群体定位即可,只希望某些群组可以看到该部分;受众群体定位应尊重广告组的成员资格

+2

谢谢Thriggle,我已经解决了REST API的问题。 –

+0

酷!你可以发布你的解决方案作为答案吗?它可能会帮助其他人。 – Thriggle

+0

感谢您的解决方案。有没有办法加载所有的组,而不是只有一个?我需要让用户进入所有组。我当前的解决方案遍历所有站点组并执行查询以获取“CanCurrentUserViewMembership”属性,但它会影响性能。 – Trike