アイテムを SharePoint リストに挿入する (私が書いていない) コードを修正しようとしています。問題は、コードが匿名ユーザーに対して機能することですが、ユーザーが ASP.NET フォーム認証を介してログインしている場合、SPListItem の Update メソッドを呼び出すと UnauthorizedAccessException が発生します。匿名ユーザーとして機能すると、SPListItem の SPWeb の SPUser が SharePoint システム アカウントであることがわかります。ただし、ユーザーがフォーム認証でログインしている場合、SPUser は null です。誰かがこの動作とそれを修正する方法を説明できますか?
RunWithElevatedPrivileges デリゲートには、最初のコード ブロックのみが含まれていましたが、すべて内部に移動してみました。動作するようになったら、いくつかの using ブロックを挿入します。
SPSecurity.RunWithElevatedPrivileges(delegate()
{
rootWeb = SPContext.Current.Site.RootWeb;
rootWeb.AllowUnsafeUpdates = true;
currentWeb = SPContext.Current.Web;
currentWeb.AllowUnsafeUpdates = true;
try
{
// Get site information
SPList franDir = rootWeb.GetList("/Lists/Directory");
SPQuery query = new SPQuery();
query.Query = "<Where><Eq><FieldRef Name='Subsite'/><Value Type='Text'>" + currentWeb.Name +
"</Value></Eq></Where>";
SPListItemCollection items = franDir.GetItems(query);
SPList l = rootWeb.GetList("/Lists/Request");
SPListItem li = l.Items.Add();
li["Location"] = siteName;
//...set more fields
li.Update();
}
catch (Exception ex)
{
rootWeb.Dispose();
logger.ErrorException("An error occured adding item", ex);
throw ex;
}
rootWeb.Dispose();
});