Изменение SPRoleAssignment на SPList без влияния на подпапки
Когда я удаляю назначения ролей для группы в списке, это также удаляет назначения ролей для подпапок. (BreakInheritance == True для подпапок.)
Мой код:
//BreakRoleInheritance on list
list.BreakRoleInheritance(true);
//Initiate a roledefinition for read only
SPRoleDefinition readerRoleDef = web.RoleDefinitions.GetByType(SPRoleType.Reader);
//Creates a roleassignment bound to the group
SPRoleAssignment readerRole = new SPRoleAssignment(group);
//Add the definition to the roleassignment
readerRole.RoleDefinitionBindings.Add(readerRoleDef);
//Gets the roledefinitions for the given group
var roleAssignements = list.RoleAssignments.Cast<SPRoleAssignment>().Where(r => r.Member.ID == group.ID);
//I would like to to something like this, but this code here affects roleassignments on subfolders as well:
roleAssignements.ToList().ForEach(r => list.RoleAssignments.RemoveById(r.Member.ID));
//Add the new, read role assignment
list.RoleAssignments.Add(readerRole);
//Save changes to the list
list.Update();
Может ли кто-нибудь указать мне правильное направление?
1 ответ
Такое поведение является особенностью. Это как цепь. Если вы нарушите наследование и определите новые назначения для объекта (списка), все подчиненные объекты (подпапки) теперь будут наследовать новые назначения, поскольку они больше не будут иметь связь с родительским объектом (веб-сайтом) объекта (списка) в который наследство было нарушено.
Если вы хотите, чтобы подпапки имели те же назначения, что и родительский объект списка (веб-сайт). Попробуйте следующее:
- Разбейте наследование в списке, как вы делали это в своем коде.
- Затем разбейте наследование для каждой подпапки также с параметром, установленным в true, при вызове BreakRoleInheritance(). На данный момент все объекты должны иметь одинаковые назначения, но без наследования от родительского объекта.
- Если вы теперь отредактируете назначения для списка, подпапки будут по-прежнему иметь назначения родительского объекта списка (веб-сайт).
Но так как цепь была разорвана. Любые изменения, которые вы делаете на сайте, не влияют на вложенные папки. Если веб-сайт и подпапки все еще должны быть синхронизированы (относительно заданий), вы должны убедиться в этом сами.