7

我正在尝试在 SharePoint 2007 中设置动态的每项菜单(编辑控制块)。我的目标是根据当前用户的组成员身份提供某些可用的功能。

我知道控制此菜单项创建的 CustomAction 标记具有 Rights 属性。我遇到的问题是我使用的组在站点中具有相同的权限(ViewListItems、ManageAlerts 等)。我们设置的组更多地处理功能,例如经理、员工等。我们希望能够将自定义功能分配给组,并让与该功能关联的菜单项仅对该组的成员可见. 每个人都拥有相同的基本站点权限,但会根据他们的登录凭据提供额外的选项。

我看过几篇关于修改 Core.js 文件以在上下文菜单中隐藏项目的文章,但它们是一种全有或全无的方法。在http://blog.thekid.me.uk/archive/2008/04/29/sharepoint-custom-actions-in-a-list-view-webpart.aspx有一篇有趣的文章,展示了如何动态修改操作菜单。修改此示例以检查用户组并根据成员资格显示或隐藏菜单很简单。不幸的是,此示例似乎不适用于上下文菜单项,如http://forums.msdn.microsoft.com/en-US/sharepointdevelopment/thread/c2259839-24c4-4a7e-83e5-3925cdd17c44/所示。

有谁知道不使用javascript的方法吗?如果没有,从 javascript 检查用户组的最佳方法是什么?

4

2 回答 2

2

您可以实现两种不同的 Javascript 函数,以将菜单项动态添加到列表项下拉列表中。Core.js (C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1033\CORE.JS) 在为选定的列表项生成菜单项时检查这些方法是否存在。“Custom_AddDocLibMenuItems”和“Custom_AddListMenuItems”是 Javascript 方法的名称。

我认为您可以使用一篇文章来解决您的特定问题,基于用户角色成员身份的动态菜单项自定义,可以在这里找到:

MSDN:自定义文档库项目的上下文菜单(注意该过程对于任何列表类型都完全相同)

本文概述了如何执行服务器端代码来定义将要显示的菜单项:

[...] 在更复杂的情况下,您必须从服务器检索可用命令的列表,因为只有在那里您才能运行业务逻辑并可能从自定义数据库中获取命令。通常,如果您正在实施一个工作流解决方案,其中每个文档都有自己的流程状态,并带有与之关联的命令,您通常希望这样做。

这种情况的解决方案是让 Custom_AddDocLibMenuItems 动态调用自定义 ASP.NET 页。此页面获取文档库的 ID 和查询字符串上的特定项目,并返回一个 XML 字符串,其中包含可用于该特定文档的命令的所有信息。这些命令根据文档的流程状态(或其他一些自定义业务逻辑)可用。[...]

于 2008-09-12T06:56:04.813 回答
2

Unfortunately this is not possible to accomplish without using javascript. The ECB doesn't render server controls defined as a custom action (unlike the SiteActions etc).

To learn how to accomplish this by using Javascript check out the following article: http://www.helloitsliam.com/archive/2007/08/10/moss2007-%E2%80%93-item-level-menus-investigation.aspx

于 2008-10-02T09:50:03.100 回答