Sharepoint 使用javascript客户端对象模型检查当前用户是否属于SP组
我没有找到如何获取当前用户并检查其是否属于特定sharepoint组的具体示例,因为我没有找到任何无法提供代码的内容 感谢您在正确方向上提供帮助。SharePoint 2013 CSOM 先决条件:仅自以下日期起与SharePoint 2013 CSOM API兼容 在中不可用 SharePoint 2010 如何通过CSOM(JavaScript)检查当前用户是否属于SharePoint组: 用法Sharepoint 使用javascript客户端对象模型检查当前用户是否属于SP组,sharepoint,sharepoint-2010,sharepoint-2013,csom,Sharepoint,Sharepoint 2010,Sharepoint 2013,Csom,我没有找到如何获取当前用户并检查其是否属于特定sharepoint组的具体示例,因为我没有找到任何无法提供代码的内容 感谢您在正确方向上提供帮助。SharePoint 2013 CSOM 先决条件:仅自以下日期起与SharePoint 2013 CSOM API兼容 在中不可用 SharePoint 2010 如何通过CSOM(JavaScript)检查当前用户是否属于SharePoint组: 用法 IsCurrentUserMemberOfGroup("Approvers", function
IsCurrentUserMemberOfGroup("Approvers", function (isCurrentUserInGroup) {
if(isCurrentUserInGroup)
{
//...
}
});
var currentUserId = _spPageContextInfo.userId;
var groupId = 4;
isUserMemberOfGroup(currentUserId, groupId,
function (isCurrentUserInGroup) {
if(isCurrentUserInGroup)
console.log('Current user is a member of Owners group');
else
console.log('Current user is not a member of Owners group');
},
function(sender,args){
console.log(args.get_message());
});
SharePoint 2010/2013 CSOM
用法
IsCurrentUserMemberOfGroup("Approvers", function (isCurrentUserInGroup) {
if(isCurrentUserInGroup)
{
//...
}
});
var currentUserId = _spPageContextInfo.userId;
var groupId = 4;
isUserMemberOfGroup(currentUserId, groupId,
function (isCurrentUserInGroup) {
if(isCurrentUserInGroup)
console.log('Current user is a member of Owners group');
else
console.log('Current user is not a member of Owners group');
},
function(sender,args){
console.log(args.get_message());
});
以下是使用SharePoint 2013的快捷方式:
function CheckCurrentUserMembership() {
var clientContext = new SP.ClientContext.get_current();
this.currentUser = clientContext.get_web().get_currentUser();
clientContext.load(this.currentUser);
this.userGroups = this.currentUser.get_groups();
clientContext.load(this.userGroups);
clientContext.executeQueryAsync(OnQuerySucceeded);
}
function OnQuerySucceeded() {
var isMember = false;
var groupsEnumerator = this.userGroups.getEnumerator();
while (groupsEnumerator.moveNext()) {
var group= groupsEnumerator.get_current();
if(group.get_title() == "Administrator Group") {
isMember = true;
break;
}
}
OnResult(isMember);
}
function OnQueryFailed() {
OnResult(false);
}
如果有人感兴趣。当您希望检查用户是否是使用组名的组的成员时,可以使用此方法
var currentUserIsMemberOf = function(groupName){
var found = false;
var dfd = $.Deferred(function(){
SP.SOD.executeOrDelayUntilScriptLoaded(function(){
context = new SP.ClientContext.get_current();
allGroups = context.get_web().get_siteGroups();
context.load(allGroups);
context.load(allGroups, 'Include(Users)');
context.executeQueryAsync(
function(){
var groupsEnumerator = allGroups.getEnumerator();
while (groupsEnumerator.moveNext()) {
var group = groupsEnumerator.get_current();
if(group.get_title() == groupName) {
var usersEnumerator = group.get_users().getEnumerator();
while (usersEnumerator.moveNext()) {
var user = usersEnumerator.get_current();
if(user.get_id() == _spPageContextInfo.userId) {
found = true;
break;
}
}
}
}
dfd.resolve(found);
},
function(){
dfd.reject(args.get_message());
}
);
}, 'sp.js');
});
return dfd.promise();
}
你可以这样用
currentUserIsMemberOf("Members of Demo").done(function(result){
alert(result)
});
注意此代码使用承诺,您可以引用jQuery使用您自己的自定义延迟对象或删除延迟对象。这仅在用户是SharePoint组的直接成员时有效,对吗?如果用户是广告组的成员,即SP组的成员,该怎么办?这可以通过JavaScript实现吗?没错。不幸的是,似乎无法确定用户是否是使用此方法的AD组的成员。只有一个executequery的第一种方法不适用于SP2013,“集合尚未初始化。尚未请求该集合,或者尚未执行该请求。可能需要显式请求该集合。”。你能否详细说明第一种方法,因为它似乎不适合我。有什么特别需要做的吗?当我尝试加载
用户的组时,访问被拒绝。用户是否需要有模拟步骤(不可用)来检查组中的用户?由于这是JSCOM,我无法进行模拟,可能最终不得不将其写入服务器端代码中。由此,我在该.userGroups.getEnumerator()上出现错误“无法读取未定义的属性”getEnumerator();在SharePoint基金会2013中,我得到了同样的错误,有人知道解决方案吗?