SharePoint 목록에 항목을 삽입하는 코드를 수정하려고합니다. 문제는 익명 사용자에 대해 코드가 작동하지만 ASP.NET 폼 인증을 통해 사용자가 로그인하면 SPListItem의 Update 메서드를 호출 할 때 UnauthorizedAccessException이 발생합니다. 익명 사용자로 작동하면 SPListItem의 SPWser가 SharePoint 시스템 계정임을 확인할 수 있습니다. 그러나 사용자가 폼 인증을 사용하여 로그인하면 SPUser는 null입니다. 누군가이 행동을 설명하고 그것을 고칠 수 있습니까?SPListItem.Update가 Forms 인증 사용자의 UnauthorizedAccessException을 throw합니다.
원래 코드의 위쪽 블록 만 RunWithElevatedPrivileges 대리자에 있었지만 내부로 옮겨 보았습니다. @AlexeiLevenkov에
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();
});
이것은 RunWithElevatedPrivileges를 사용하는 무의미한 방법입니다. 실제로 "상승 된 권한으로 실행"하는 것과 동일한 siteId/webId의 내부에 새 SPSite/SPWeb 객체를 만들어야합니다. 문제를 해결하고 여전히 문제가 있는지 확인하십시오. –