Как получить текущие группы пользователей в мох?
Я надеюсь, что вы можете решить мою проблему.
Я пытаюсь установить pemrissions уровня элемента для списка sharepoint и библиотек документов, используя обработчик событий, но я не смог этого сделать. Пожалуйста, помогите мне, это - мой код. Мне нужно назначить разрешения для элемента на основе имени пользователя входа. Для какой группы он принадлежит. Я не могу получить группы текущих пользователей. это мой код
public override void ItemAdded(SPItemEventProperties properties)
{
using (SPSite _site = new SPSite(properties.WebUrl))
{
using (SPWeb spWeb = _site.OpenWeb(properties.RelativeWebUrl))
{
SPUser currentUser = spWeb.CurrentUser;
SPListItem listItem = properties.ListItem;
listItem.BreakRoleInheritance(true);
SPGroupCollection spgroup = currentUser.Groups;
foreach (SPGroup group in spgroup)
{
SPRoleAssignment roleAssignment = new SPRoleAssignment((SPPrincipal)group);
SPRoleDefinition roleDefinition = spWeb.RoleDefinitions.GetByType(SPRoleType.Contributor);
roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
listItem.RoleAssignments.Add(roleAssignment);
spWeb.AllowUnsafeUpdates = true;
listItem.Update();
spWeb.AllowUnsafeUpdates = false;
}
}
}
}
1 ответ
Попробуй это:
public override void ItemAdded(SPItemEventProperties properties)
{
// run the code impersonating the web application account, this works better than the regular RunWithElevatedPrivileges
using (var site = new SPSite(properties.SiteId, properties.ListItem.ParentList.ParentWeb.Site.SystemAccount.UserToken))
{
using (var web = site.OpenWeb(properties.RelativeWebUrl))
{
web.AllowUnsafeUpdates = true;
var item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);
item.BreakRoleInheritance(false);
foreach (SPGroup group in web.CurrentUser.Groups)
{
var assignment = item.Web.RoleAssignments.GetAssignmentByPrincipal(group);
var roleDefinition = web.RoleDefinitions.GetByType(SPRoleType.Contributor);
assignment.RoleDefinitionBindings.Add(roleDefinition);
item.RoleAssignments.Add(assignment);
}
DisableEventFiring();
item.SystemUpdate(false);
EnableEventFiring();
web.AllowUnsafeUpdates = false;
}
}
}