2012-10-08 3 views
0

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(); 
     }); 
+1

이것은 RunWithElevatedPrivileges를 사용하는 무의미한 방법입니다. 실제로 "상승 된 권한으로 실행"하는 것과 동일한 siteId/webId의 내부에 새 SPSite/SPWeb 객체를 만들어야합니다. 문제를 해결하고 여전히 문제가 있는지 확인하십시오. –

답변

0

덕분에 내가 기본값을 사용하여 생성 된 SP 객체의 기존 인스턴스를 사용하고 있기 때문에이 작동하지 않는 것을 볼 : 나는 그것을 작동 일단 좀 사용하여 블록을 삽입 할 수 있습니다 특권. 코드가 아무 것도하지 않는다는 증거로, 익명 사용자로 실행할 때 코드는 RunWithElevatedPrivileges 호출 없이도 성공합니다. 나는이 변화를 만들었고 그것을 돌 보았다.

SPSecurity.RunWithElevatedPrivileges(delegate() 
{ 
    rootWeb = new SPSite(SPContext.Current.Site.ID).RootWeb; 

감사합니다.