请注意我正在谈论注入我的代码到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 –