我们已将一个AD组添加到SharePoint用户组.现在,当我们使用用户登录时,我们要检查已登录AD用户的权限.
遗憾的是,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());}
);
Run Code Online (Sandbox Code Playgroud)
只有在您将组设置为仅对成员可见时,此方法才有效,如果您具有提升的访问权限,它将始终返回误报,例如,如果您是网站集管理员或组所有者.
编辑:如何遍历所有网站组
如果要应用与上述相同的逻辑来检查站点上所有组中的当前用户的成员身份(而不是按其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());});
Run Code Online (Sandbox Code Playgroud)
选项2:使用受众群体定位作为变通方法
当然,正如我在评论中提到的,对于您的要求,您甚至可能不需要以编程方式访问组成员身份.您只需在要仅对某些组显示的Web部件上设置受众群体定位; 受众群体定位应尊重AD群组成员身份
| 归档时间: |
|
| 查看次数: |
6785 次 |
| 最近记录: |