我们已将一个AD组添加到SharePoint用户组。现在,当我们使用用户登录时,我们想要检查已登录AD用户的权限。
答案 0 :(得分:8)
不幸的是,您在服务器端代码中使用的SPGroup.ContainsCurrentUser
属性无法通过JavaScript客户端对象模型访问(至少在SP2010和2013中没有)。
选项1:使用组成员资格可见性作为解决方法
一个潜在的解决方法是通过JavaScript客户端对象模型利用您可以访问组的两个属性的组合:OnlyAllowMembersViewMemberhip
和CanCurrentUserViewMembership
。
如果当前用户可以查看仅设置为允许组成员执行此操作的组的组成员资格,我们可以假设该用户是组成员。
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:将受众群体定位用作解决方法
当然,正如我在评论中提到的,对于您的要求,您甚至可能不需要以编程方式访问组成员身份。您只需在要仅对某些组显示的Web部件上设置受众群体定位;受众群体定位应尊重AD群组成员资格。