禁用";“高级…”;在Plone的工作流状态菜单中

禁用";“高级…”;在Plone的工作流状态菜单中,plone,Plone,我想禁用工作流状态菜单中除经理和站点管理员之外的其他角色的“高级…”(内容\状态\历史记录)链接。我可以用它来做这件事吗?或者此链接的权限与是否存在转换相关联?链接的存在与是否存在工作流转换相关联。它链接到的表单提供了为当前对象上可用的过渡设置的附加选项。没有控制其存在的权限;菜单项是硬编码的 从: 如果len(结果)>0: results.append({'title':\(u'label\u advanced',default=u'advanced…), “描述”:“, “操作”:url+“

我想禁用工作流状态菜单中除经理和站点管理员之外的其他角色的“高级…”(内容\状态\历史记录)链接。我可以用它来做这件事吗?或者此链接的权限与是否存在转换相关联?

链接的存在与是否存在工作流转换相关联。它链接到的表单提供了为当前对象上可用的过渡设置的附加选项。没有控制其存在的权限;菜单项是硬编码的

从:

如果len(结果)>0:
results.append({'title':\(u'label\u advanced',default=u'advanced…),
“描述”:“,
“操作”:url+“/content\u status\u history”,
“选定”:False,
“图标”:无,
'extra':{'id':'advanced','separator':'actionSeparator','class':'ksignore'},
“子菜单”:无,
})
为了提供您自己的实现(如果满足某些条件,可能使用再次删除最后一个选项的子类),您必须使用重新定义
browser:menu
注册

overrides.zcml
中,您必须使用以下
browser:menu
声明指向您自己的实现:


然后在
yourmodule.py
中创建一个
YourWorkflowMenu
类,类似于:

从plone.app.contentmenu.menu导入工作流菜单
为您的WorkflowMenu(WorkflowMenu)初始化:
def getMenuItems(自身、上下文、请求):
结果=超级(您的工作流菜单,自我)。getMenuItems(上下文,请求)
如果len(results)>0和其他条件:
#删除状态历史记录菜单项(“高级…”)
结果=[r代表结果中的r
如果不是r['action'].endswith('/content\u status\u history')]
返回结果

您应该能够通过添加

a#advanced {
   display: none;
}
适合你的风格


与以前臃肿的干净解决方案相比,这是一个实用的解决方案。

这会隐藏菜单,但不会对能够观察或猜测其URL的人禁用它。这是否是一个问题取决于情况。对……然而,潜在的安全机制仍然适用于这里。这个建议对我来说已经很明显了。但我不只是想隐藏它,还想禁用它。谢谢你,有什么区别吗。即使删除菜单项,执行操作的视图仍然存在。这是最简单也是最好的解决方案。此外,如果您通过“内容”选项卡,标记文章并点击“更改状态”按钮,也会显示表单。要对除经理以外的所有人禁用该功能,您还必须至少自定义content\u status\u history-template。我不明白这个用例,因为这是一个批处理功能,而不是访问问题,不是吗?我希望用一种更短的方法来使用权限。但这是有效的。奇妙的答案,就像是普隆4.2上的符咒。如果可以,我会+100。