К сожалению, 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){alert("Whoops! "+args.get_message());}
);
Этот подход будет работать только в том случае, если вы настроили группы так, чтобы они были видны только участникам, и он всегда будет возвращать ложное срабатывание, если у вас есть повышенный доступ, например, если вы являетесь администратором семейства веб-сайтов или владельцем группы.
Как пройтись по всем группам сайтов
Если вы хотите применить приведенную выше логику для проверки членства текущего пользователя во всех группах на сайте (вместо указания группы по ее идентификатору), вы можете использовать измененный код 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. Используйте таргетинг на аудиторию как обходной путь
Для ваших требований вам может даже не потребоваться программный доступ к членству в группе. Вы можете просто установить таргетинг на аудиторию в веб-частях, которые должны быть видны только определенным группам; таргетинг на аудиторию должен уважать членство в группах AD.
person
Thriggle
schedule
16.10.2015