2012-08-14 50 views
1

我正在創建一個SharePoint應用程序,並希望儘可能經常以正確的方式執行操作。此數據訪問模式在SharePoint中可以接受嗎?

我在網站定義中部署了一系列列表,我想將數據訪問鎖定到一系列Get()方法來維護約定。

我的一些列表在列表定義中設置了SecurityBits =「22」,因爲我希望僅在UI中修改List Item條目。

我想避免濫用SPSecurity.RunWithElevatedPrivileges。我也想避開SPSecurity.RunWithElevatedPrivileges的限制,你不能在代表中有return函數。

這似乎是一個強制執行此操作的好方法。如果您打電話給列表以獲取具有正常安全性的列表項目,則可以致電var PostList = CoreLists.Posts。如果您需要使用提升的權限致電該列表,請撥打var PostList = CoreLists.SystemAccount.Posts

這是一個很好的方法嗎?

public static class CoreLists 
{ 
    public static SPList Posts() 
    { 
     return SPContext.Current.Web.GetList(SPContext.Current.Web.ServerRelativeUrl + "/lists/CommunityPost"); 
    } 
    public static class SystemAccount 
    { 
     public static SPList Posts() 
     { 
      using (var elevatedSite = new SPSite(SPContext.Current.Site.ID, SPContext.Current.Site.SystemAccount.UserToken)) 
      using (var web = elevatedSite.OpenWeb()) 
       return web.GetList(web.ServerRelativeUrl + "/lists/CommunityPost"); 
     } 
    } 
} 

回答

1

我認爲只要您的安全上下文有意義(即安全性最低的用戶可以使用這些方法訪問列表項),第一類看起來很好。我會好奇第二個中的using語句如何影響代碼的調用。

ElevatePriveleges的事情是,有時當您有廣泛使用的數據訪問代碼時,如果您不想讓他們直接在SharePoint用戶界面中訪問列表,您必須提升權限,但希望在其上下文中執行代碼訪問用戶控件等的列表項。

有幾件事要記住: 1.始終認識到使用SharePoint中的列表訪問代碼的內存泄漏。在您的課程中,您處理兩種情況都很好,就處理任何SPRequest處置而言。 2.你幾乎從不想在代碼中使用SPList.Items。如果以這種方式列出清單並且您不管理調用清單的代碼,則可能遇到大清單的性能問題,因爲調用.Items屬性而不是特定的查詢,會爲每個項目加載每個項目該清單。

希望這有助於

相關問題