5

請注意我正在談論注入我的代碼到SharePoint服務器端(通過包/插件等),而不是使用Microsoft.SharePoint.dll或Web服務來訪問SharePoint。掛鉤到SharePoint服務器端

所以我的問題是,我需要自定義文檔庫的工作方式,包括自定義權限管理。我一直在瀏覽分析內部工作的Microsoft.SharePoint.dll。這裏是我的觀察:

  1. SPDocumentLibrary提供了管理文檔庫的核心邏輯。但是,它本身並不是WebPart
  2. 文檔庫的實際Web部件渲染可能由ListViewWebPart或派生類來處理。
  3. 實際上有一個SPPictureLibrary類,這讓我認爲有可能繼承SPDocumentLibrary類來爲文檔庫提供自定義行爲。
  4. WebPartAdder.SiteWebPartGalleryProvider以某種方式將SPDocumentLibrary連接到它的WebPart裏面的Microsoft.SharePoint.WebPartPages.WebPartAdder.AddSources方法。

現在所有這些都是客戶端,這些都不會發生在SharePoint服務器本身(afaik)上。但是我看到那個SPSecurableObjectSPDocumentLibrary/SPList覆蓋重寫的方法,具體如下:

  1. CheckPermissions
  2. GetUserEffectivePermissionInfo
  3. GetUserEffectivePermissions
  4. EffectiveBasePermissions

我真正想要做的是能夠覆蓋CheckPermissions/EffectiveBasePermissions在SharePoint服務器內的SPDocumentLibrary中注入我的自定義邏輯。

我現在將我的研究轉移到SharePoint服務器端DLL並理解它們。但我希望得到一些專家意見,認爲這是否可行/是否指向正確的方向。微軟的標誌(特別是考慮ASP.NET 2.0/ASP.NET MVC作爲基準)是可擴展性/提供者框架。他們爲開箱即用的「事物」提供了優秀的提供者,但是您可以通過繼承/實施某些東西來替代默認提供者來創建類。所以:

  1. 我可以注入SharePoint服務器端嗎?我的理想解決方案是創建一個SPDocumentLibrary派生類(服務器端),並注入它,以便在任何時候實例化文檔庫時,創建我的類對象(而不是SPDocumentLibrary,假設它也是類服務器端。仍然需要「反映」SharePoint服務器端的類)。
  2. 如果1)是nopes,我可以創建一個自定義WebPart以使用SharePoint文檔庫的方式提供本機文檔庫的感覺,但仍允許我在訪問該Web部件時使用SPDocumentLibrary派生類(請再次注意,我所有的討論都圍繞着SharePoint服務器端,即我的代碼在SharePoint的地址空間/ w3wp進程中執行)。
  3. 爲什麼我們有SPSite.EffectiveBasePermissions的邏輯。我的意思是它應該是CSOM,它應該簡單地負責由服務器返回/發送到服務器的序列化/反序列化。不過,我在這個被重寫的屬性中圍繞權限推導看到了精巧的邏輯。
  4. 如果1)和2)都是空操作(字面上:)),在SharePoint根據這些權限採取任何操作之前,在SharePoint的地址空間中操作時,是否有任何操作SharePoint有效權限的選項?

我知道它是一個很長的問題,但希望我在做好我的研究。

+0

您是否考慮過實施自定義角色提供程序?也許您可以將一些自定義聲明應用於文檔庫,然後將這些自定義聲明插入正在運行的標識中。 http://geekswithblogs.net/GinoAbraham/archive/2017/03/21/custom-role-claim-based-authentication-on-sharepoint-2013.aspx –

回答

2

我不認爲你在SharePoint中具有該級別的控制。

不確定您是否查看了SharePoint事件的選項。您可以將邏輯添加爲SharePoint事件,而不是創建自己的類來添加邏輯。您可以訂閱相關事件並相應地添加邏輯。例如,您可以取消基於自定義邏輯的更新。但是,我不認爲您可以自定義基本權限邏輯。

SPList有一個方法'CheckPermissions',後者又調用基類(SPSecurableObject)的'CheckPermissions'。但是,我懷疑有可能創建自己的子類,覆蓋相關方法並接管權限邏輯。這是SharePoint非常核心的東西,我不認爲這是定製的。