何か足りないものがないか知りたいです。方法は次のとおりです。SPFolderの場合、関連付けられたアイテムの権限(SPFolder.Item)を変更します。したがって、SPFolder権限の管理は、SPListItem権限の管理に要約されると思います。SPListItemの場合、ロールの継承を最初に中断してSPListItem.BreakRoleInheritance()
から、RoleAssignments
コレクションでロールを追加および削除します。
RoleAssignmentsが(継承以外の)SPListItemのアクセス許可を管理する唯一の方法であり、ロールなしで個々のアクセス許可を管理する方法があるのだろうか。EffectiveBasePermissionsプロパティもありますが、よくわかりません。
したがって、問題は、RoleAssignmentsコレクションとは別にSPListItem権限を管理する他の方法(継承以外)があるかどうかです。
@Edit:AllRolesForCurrentUserもありますが、RoleAssignmentsプロパティから同じ情報を取得できると思いますので、これは便宜上のものです。
@編集: Floが彼の回答で述べているように、設定に問題があります
folder.ParentWeb.AllowUnsafeUpdates = true;
そしてBreakRoleInheritance
、「false」の引数を使用して(つまり、親オブジェクトの権限をコピーせずに)使用します。
folder.Item.BreakRoleInheritance(false);
BreakRoleInheritance
安全でない更新を許可した後は、期待どおりにGETリクエストで機能しません。おそらく、メソッドAllowUnsafeUpdates
は「false」にリセットされます。
これについて私が知っている回避策の1つは、BreakRoleInheritance(true)の後で、次のように、継承されたアクセス許可を手動で削除することです。
folder.Item.BreakRoleInheritance(false);
while(folder.Item.RoleAssignments.Count > 0) {
folder.Item.RoleAssignments.Remove(0);
}
ありがとう!