1

当我删除列表中组的角色分配时,这也会删除子文件夹的角色分配。(对于子文件夹,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();

有人可以指出我正确的方向吗?

4

1 回答 1

1

此行为是设计使然。它就像一条链子。如果您打破继承并为对象(列表)定义新分配,所有子对象(子文件夹)现在将继承新分配,因为它们不再与对象(列表)的父对象(网站)有联系遗产被打破了。

如果您希望子文件夹与列表的父对象(网站)具有相同的分配。尝试以下操作:

  1. 就像您在代码中所做的那样,分解列表上的继承。
  2. 然后在调用 BreakRoleInheritance() 时也将参数设置为 true 来分解每个子文件夹的继承。目前,所有对象仍应具有相同的分配,但不从父对象继承它们。
  3. 如果您现在编辑列表的分配,子文件夹仍将具有列表的父对象(网站)的分配。

但随着链条被打破。您在网站上所做的任何更改都不会影响子文件夹。如果网站和子文件夹仍应保持同步(关于分配),您必须自己确保这一点。

于 2011-04-05T11:56:42.330 回答