连接到 SharePoint 服务器端

Posted

技术标签:

【中文标题】连接到 SharePoint 服务器端【英文标题】:Hooking into SharePoint server-side 【发布时间】:2018-04-02 02:05:30 【问题描述】:

请注意,我说的是将我的代码注入 SharePoint 服务器端(通过包/加载项等),而不是使用 Microsoft.SharePoint.dll 或 Web 服务来访问 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

我真正想做的是能够在 SharePoint 服务器内的 SPDocumentLibrary 上覆盖 CheckPermissions / EffectiveBasePermissions 以注入我的自定义逻辑。

我现在会将我的研究转移到 SharePoint 服务器端 dll 并理解它们。但我很想就这是否可行/指向正确的方向获得一些专家意见。 Microsoft 的标志(特别是考虑将 ASP.NET 2.0 / ASP.NET MVC 作为基准)是可扩展性/提供程序框架。它们为开箱即用的“事物”提供了出色的提供者,但您可以通过继承/实现某些东西来替换默认提供者来创建类。所以:

    我可以注入 SharePoint 服务器端吗?我理想的解决方案是创建一个SPDocumentLibrary 派生类(服务器端),并将其注入,以便在实例化文档库时创建我的类对象(而不是SPDocumentLibrary,假设这是类服务器-侧也是。我仍然需要“反映”SharePoint 服务器端类)。 如果 1) 不正确,我是否可以创建一个自定义 WebPart 来使用 SharePoint 文档库,使其具有原生文档库的感觉,但仍然允许我在该情况下使用 SPDocumentLibrary 派生类访问 web 部件(请再次注意,我所有的讨论都围绕 SharePoint 服务器端,即我的代码在 SharePoint 的地址空间/w3wp 进程内执行)。 为什么我们在SPSite.EffectiveBasePermissions 中有逻辑。我的意思是它应该是 CSOM,它应该只负责对服务器返回/发送的内容进行序列化/反序列化。但是,我在这个被覆盖的属性中看到了围绕权限推导的复杂逻辑。 如果 1) 和 2) 都是无操作(字面意思是 :)),在 SharePoint 采取基于这些权限的任何操作之前,我是否可以在 SharePoint 的地址空间中操作时操纵 SharePoint 有效权限。

我知道这是一个很长的问题,但希望我的研究做得很好。

【问题讨论】:

您是否考虑过实施自定义角色提供程序?也许您可以将一些自定义声明应用于您的文档库,然后将这些自定义声明插入到正在运行的标识中。 geekswithblogs.net/GinoAbraham/archive/2017/03/21/… 【参考方案1】:

我认为您在 SharePoint 中没有那种级别的控制。

不确定您是否查看过 SharePoint 事件选项。您可以将逻辑添加为 SharePoint 事件,而不是创建自己的类来添加逻辑。您可以订阅相关事件并相应地添加逻辑。例如,您可以根据自定义逻辑取消更新。但是,我认为您不能自定义基本权限逻辑。

SPList 有一个方法“CheckPermissions”,该方法又调用基类 (SPSecurableObject) 的“CheckPermissions”。但是,我怀疑是否有可能创建自己的子类,覆盖相关方法并接管权限逻辑。它是 SharePoint 非常核心的东西,我认为它不应该被定制。

【讨论】:

以上是关于连接到 SharePoint 服务器端的主要内容,如果未能解决你的问题,请参考以下文章

除非用户第一次连接到 Sharepoint 服务器,否则将文件复制到 Sharepoint-share 失败

socket.io 不工作,我的颤振应用程序没有连接到服务器或后端部分

SharePoint 中的 Visual Studio Team Foundation 服务器 Web 部件无法连接到 TFS 2015 Update 3

通过 SharePoint ASP.Net GridView 连接到 Access DB

在 sharepoint 中创建可视 Web 部件连接到列表

使用服务器端 Blazor,在连接到 SQL Server 数据库时如何使用 Windows 身份验证模拟用户?