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

この動作は仕様です。鎖のようなものです。継承を分割し、オブジェクト (リスト) の新しい割り当てを定義すると、すべてのサブオブジェクト (サブフォルダー) は新しい割り当てを継承します。これは、オブジェクト (リスト) の親オブジェクト (Web サイト) への接続がなくなるためです。継承が壊れました。

サブフォルダーにリストの親オブジェクト (Web サイト) と同じ割り当てを持たせたい場合。次のことを試してください。

  1. コードで行ったように、リストの継承を分割します。
  2. 次に、BreakRoleInheritance() を呼び出すときにパラメーターを true に設定して、サブフォルダーごとに継承を分割します。現時点では、すべてのオブジェクトは同じ割り当てを持つ必要がありますが、親オブジェクトから継承する必要はありません。
  3. ここでリストの割り当てを編集すると、サブ フォルダーにはリストの親オブジェクト (Web サイト) の割り当てが残ります。

しかし、チェーンが壊れたように。Web サイトで行った変更は、サブ フォルダーには影響しません。Web サイトとサブ フォルダーがまだ同期している必要がある場合 (割り当てに関して)、何らかの方法でこれを自分で確認する必要があります。

于 2011-04-05T11:56:42.330 に答える