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非常核心的东西,我不认为这是定制的。