【发布时间】:2012-08-11 01:40:39
【问题描述】:
我想为除经理和站点管理员之外的其他角色禁用工作流状态菜单中的“高级...”(content_status_history) 链接。是否有我可以用来执行此操作的权限?还是这个链接的权限加上转换的存在?
【问题讨论】:
标签: plone
我想为除经理和站点管理员之外的其他角色禁用工作流状态菜单中的“高级...”(content_status_history) 链接。是否有我可以用来执行此操作的权限?还是这个链接的权限加上转换的存在?
【问题讨论】:
标签: plone
链接的存在与工作流转换相关联。它链接到的表单提供了额外的选项来设置当前对象上可用的转换。没有权限控制它的存在;菜单项是硬编码的。
来自plone.app.contentmenu.menu source:
if len(results) > 0:
results.append({ 'title' : _(u'label_advanced', default=u'Advanced...'),
'description' : '',
'action' : url + '/content_status_history',
'selected' : False,
'icon' : None,
'extra' : {'id': 'advanced', 'separator': 'actionSeparator', 'class': 'kssIgnore'},
'submenu' : None,
})
要提供您自己的实现(如果满足某些条件,可能会使用一个删除最后一个选项的子类),您必须使用override 重新定义browser:menu 注册.
在您的 overrides.zcml 中,您必须使用以下 browser:menu 声明指向您自己的实现:
<browser:menu
id="plone_contentmenu_workflow"
title="The 'workflow' menu - allows the user to execute workflow transitions"
class=".yourmodule.YourWorkflowMenu"
/>
然后在yourmodule.py 创建一个YourWorkflowMenu 类,类似于:
from plone.app.contentmenu.menu import WorkflowMenu
class YourWorkflowMenu(WorkflowMenu):
def getMenuItems(self, context, request):
results = super(YourWorkflowMenu, self).getMenuItems(context, request)
if len(results) > 0 and someothercondition:
# Remove status history menu item ('Advanced...')
results = [r for r in results
if not r['action'].endswith('/content_status_history')]
return results
【讨论】:
你应该可以通过添加隐藏菜单项
a#advanced {
display: none;
}
你的风格。
与之前臃肿的干净解决方案相比,这是一个务实的解决方案。
【讨论】: