Изменение SPRoleAssignment на SPList без влияния на подпапки - PullRequest
1 голос
/ 05 апреля 2011

Когда я удаляю назначения ролей для группы в списке, это также удаляет назначения ролей для подпапок. (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 Ответ

1 голос
/ 05 апреля 2011

Это поведение является намеренным. Это как цепь. Если вы нарушите наследование и определите новые назначения для объекта (списка), все подчиненные объекты (подпапки) теперь будут наследовать новые назначения, поскольку они больше не будут иметь связь с родительским объектом (веб-сайтом) объекта (списка) в который наследство было нарушено.

Если вы хотите, чтобы подпапки имели те же назначения, что и родительский объект списка (веб-сайт). Попробуйте следующее:

  1. Разбейте наследование в списке, как вы делали это в своем коде.
  2. Затем разбейте наследование для каждой подпапки также с параметром, установленным в true, при вызове BreakRoleInheritance (). На данный момент все объекты должны иметь одинаковые назначения, но без наследования от родительского объекта.
  3. Если вы теперь отредактируете назначения для списка, подпапки будут по-прежнему иметь назначения родительского объекта списка (веб-сайт).

Но когда цепь разорвалась. Любые изменения, которые вы делаете на сайте, не влияют на вложенные папки. Если веб-сайт и подпапки все еще должны синхронизироваться (в отношении заданий), вам нужно как-то убедиться в этом самостоятельно.

...