下面的场景:
- 用户登录到我的 Plone 5 站点。
- 工具栏出现了,但他们没有选项可以用它做任何事情,因为他们在 Authenticated Group 中。
他们只能获得经过身份验证的访问权限以查看一些区域。如何禁止某些用户组的工具栏?或者最好的方法是什么?
最简单的方法是使用 CSS。您可以提供隐藏工具栏的条件 CSS:
#plone-toolbar-container {display: none}
本文描述了一个非常简单的方法:http: //datakurre.pandala.org/2015/05/plonecustom-for-plone-5.html
请注意:工具栏还包含个人偏好部分,因此删除它也会隐藏一些用户的功能。
一个不错的方法是使用角色和权限。您可以通过覆盖工具栏并定义您自己的过滤权限的条件来仅隐藏Member
角色(而不是编辑、审阅者和经理)的工具栏。ModifyPortalContent
这是一个示例,当您开发自己的依赖于z3c.jbot的 Add on 时。
将toolbar.pt
模板的副本放在overrides
Add on 的目录中。这是模板的路径:plone/app/layout/viewlets/toolbar.pt
. 将新文件重命名为plone.app.layout.viewlets.toolbar.pt
以使其正常工作(请参阅 plone 文档)。
自定义模板中的主要条件。
<section id="edit-bar" role="toolbar"
tal:define="portal_state view/portal_state;
personal_bar python: view.get_personal_bar()"
tal:condition="not: portal_state/anonymous"
i18n:domain="plone">
变成
<section id="edit-bar" role="toolbar"
tal:define="portal_state view/portal_state;
personal_bar python: view.get_personal_bar();
checkPermission nocall: context/portal_membership/checkPermission"
tal:condition="python:checkPermission('Modify portal content',context)"
i18n:domain="plone">
添加一些 CSS 以删除仅适用于成员角色的主体上的填充。
userrole-member.plone-toolbar-left-default { padding-left:0 }
现在为用户提供一些新的链接,/@@personal-preferences
然后/logout
你就完成了。
还有其他方法可以禁用工具栏:
请注意,虽然其中任何一个都将删除工具栏,但该body
标签仍将包含一个plone-toolbar-left-default
CSS 类,该类将导致页面被填充(即,将有一个工具栏大小的空白区域)。因此必须覆盖其 CSS,或者
必须覆盖plone_layout 视图的 bodyClass 方法,以便不再生成 CSS 类。
现有的 Plone 文档有关于如何使主题规则有条件或有条件地覆盖模板的说明。
在 plone 5.1 中,我们拥有“显示工具栏”的权限。
在您的通用设置配置文件中,添加一个文件 rolemap.xml
在这里,我只为具有角色编辑器、站点管理员、经理(对成员隐藏它)的用户显示工具栏。添加成员以仅在没有成员角色的情况下将其隐藏以进行身份验证。
<?xml version="1.0"?>
<rolemap>
<permissions>
<permission name="Show Toolbar" acquire="False">
<role name="Manager"/>
<role name="Site Administrator"/>
<role name="Editor"/>
</permission>
</permissions>
</rolemap>
Plone 5.1 (dev):我使用 CSS的简单而有效的方法:
body.userrole-member #edit-zone {
display:none;
}
body.userrole-editor #edit-zone,
body.userrole-contributor #edit-zone,
body.userrole-reviewer #edit-zone {
display:inline-block;
}
额外做:
我想要工具栏而不是contentview
plone-toolbar-main中的图标和链接,所以我编辑了我的toolbar.pt:
<section id="edit-bar" role="toolbar"
tal:define="portal_state view/portal_state;
personal_bar python: view.get_personal_bar();
checkPermission nocall:
context/portal_membership/checkPermission"
tal:condition="not: portal_state/anonymous"
i18n:domain="plone">
……
<ul class="plone-toolbar-main">
<div
tal:condition="python:checkPermission('Modify portal
content',context)"
tal:replace="structure view/base_render">