請注意我正在談論注入我的代碼到SharePoint服務器端(通過包/插件等),而不是使用Microsoft.SharePoint.dll
或Web服務來訪問SharePoint。掛鉤到SharePoint服務器端
所以我的問題是,我需要自定義文檔庫的工作方式,包括自定義權限管理。我一直在瀏覽分析內部工作的Microsoft.SharePoint.dll
。這裏是我的觀察:
SPDocumentLibrary
提供了管理文檔庫的核心邏輯。但是,它本身並不是WebPart
。- 文檔庫的實際Web部件渲染可能由
ListViewWebPart
或派生類來處理。 - 實際上有一個
SPPictureLibrary
類,這讓我認爲有可能繼承SPDocumentLibrary
類來爲文檔庫提供自定義行爲。 WebPartAdder.SiteWebPartGalleryProvider
以某種方式將SPDocumentLibrary
連接到它的WebPart
裏面的Microsoft.SharePoint.WebPartPages.WebPartAdder.AddSources
方法。
現在所有這些都是客戶端,這些都不會發生在SharePoint服務器本身(afaik)上。但是我看到那個SPSecurableObject
SPDocumentLibrary
/SPList
覆蓋重寫的方法,具體如下:
CheckPermissions
GetUserEffectivePermissionInfo
GetUserEffectivePermissions
EffectiveBasePermissions
等
我真正想要做的是能夠覆蓋CheckPermissions
/EffectiveBasePermissions
在SharePoint服務器內的SPDocumentLibrary
中注入我的自定義邏輯。
我現在將我的研究轉移到SharePoint服務器端DLL並理解它們。但我希望得到一些專家意見,認爲這是否可行/是否指向正確的方向。微軟的標誌(特別是考慮ASP.NET 2.0/ASP.NET MVC作爲基準)是可擴展性/提供者框架。他們爲開箱即用的「事物」提供了優秀的提供者,但是您可以通過繼承/實施某些東西來替代默認提供者來創建類。所以:
- 我可以注入SharePoint服務器端嗎?我的理想解決方案是創建一個
SPDocumentLibrary
派生類(服務器端),並注入它,以便在任何時候實例化文檔庫時,創建我的類對象(而不是SPDocumentLibrary
,假設它也是類服務器端。仍然需要「反映」SharePoint服務器端的類)。 - 如果1)是nopes,我可以創建一個自定義
WebPart
以使用SharePoint文檔庫的方式提供本機文檔庫的感覺,但仍允許我在訪問該Web部件時使用SPDocumentLibrary
派生類(請再次注意,我所有的討論都圍繞着SharePoint服務器端,即我的代碼在SharePoint的地址空間/ w3wp進程中執行)。 - 爲什麼我們有
SPSite.EffectiveBasePermissions
的邏輯。我的意思是它應該是CSOM,它應該簡單地負責由服務器返回/發送到服務器的序列化/反序列化。不過,我在這個被重寫的屬性中圍繞權限推導看到了精巧的邏輯。 - 如果1)和2)都是空操作(字面上:)),在SharePoint根據這些權限採取任何操作之前,在SharePoint的地址空間中操作時,是否有任何操作SharePoint有效權限的選項?
我知道它是一個很長的問題,但希望我在做好我的研究。
您是否考慮過實施自定義角色提供程序?也許您可以將一些自定義聲明應用於文檔庫,然後將這些自定義聲明插入正在運行的標識中。 http://geekswithblogs.net/GinoAbraham/archive/2017/03/21/custom-role-claim-based-authentication-on-sharepoint-2013.aspx –