ItemUpdating イベントを使用するイベント レシーバーがあります。親からアイテムのアクセス許可を継承せず、ドロップオフ ライブラリにアップロードされたアイテムのすべてのアクセス許可を取り除こうとしています。これは、ドキュメントに機密情報が含まれており、ドキュメントが自動仕分けライブラリに到着すると、誰にも表示されてはならないためです。
以下のコードは、ドロップオフ ライブラリに到達したときに CurrentListItem.BreakRoleInheritence(true) 行を実行すると、次のエラーをスローします: アクセスが拒否されました。(HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite oSiteCollection = new SPSite(properties.ListItem.Web.Url))
{
using (SPWeb oWebsite = oSiteCollection.RootWeb)
{
SPListItem CurrentListItem = properties.ListItem;
SPRoleAssignmentCollection SPRoleAssColn = CurrentListItem.RoleAssignments;
oSiteCollection.AllowUnsafeUpdates = true;
oWebsite.AllowUnsafeUpdates = true;
CurrentListItem.BreakRoleInheritance(true);
oSiteCollection.AllowUnsafeUpdates = true;
oWebsite.AllowUnsafeUpdates = true;
for (int i = SPRoleAssColn.Count - 1; i >= 0; i--)
{
if (SPRoleAssColn[i].Member.Name != "System Account")
{
SPRoleAssColn.Remove(i);
}
}
}
}
});
また、次のことも行いました: - アプリ プールの ID がサイト コレクション管理者であることを確認しました - GetItemById を使用してリスト アイテムを再度取得しようとしました (ただし、アイテムがまだ存在するため、アイテムが存在しないというエラーがスローされます)まだ公開されていません - ドキュメントを公開する前にアクセス許可を削除する必要があります - チェックインを強制することはできません。そうしないと、ドロップオフ ライブラリがドキュメントを処理してターゲット ライブラリに移動する可能性があります) - を使用して Web およびサイト オプションを取得しようとしましたGUID - AllowUnsafeUpdates を使用して配置のさまざまな組み合わせを試しました - サイト コレクション管理者のユーザー トークンを使用して Web オブジェクトを開きました
何らかの理由で、ドキュメントがターゲット ライブラリに到達すると、上記のコードは正常に機能します (ドキュメントが目的のライブラリに到達すると、すべてのアクセス許可が再び削除されるため)。これは、システム アカウントを使用してドキュメントが自動仕分けライブラリからターゲット ライブラリに移動されるために発生します。
上記と同様のアプローチを利用しながら、「アクセスが拒否されました」エラーを回避する方法について何か考えはありますか?