如何为经过身份验证的用户组禁用 Plone 5 工具栏?

How to disable Plone 5 Toolbar for authenticated user group?

以下场景:

他们只有经过身份验证的访问权限才能查看几个区域。我怎样才能抑制某些用户组的工具栏?或者最好的方法是什么?

最简单的方法是使用 CSS。您可以提供隐藏工具栏的条件 CSS:

#plone-toolbar-container {display: none}

本文介绍了一种非常简单的方法:http://datakurre.pandala.org/2015/05/plonecustom-for-plone-5.html

请注意:工具栏还包含个人喜好部分,因此删除它也会隐藏一些用户功能。

还有其他方法可以禁用工具栏:

请注意,虽然其中任何一个都会删除工具栏,但 body 标记仍将包含 plone-toolbar-left-default CSS class,这将导致页面被填充(即,将有一个工具栏大小的空白 space)。所以 CSS 必须被覆盖,或者
必须覆盖 bodyClass method of the plone_layout view 以便不再生成 CSS class。

现有的 Plone 文档有关于如何使主题规则有条件或有条件地覆盖模板的说明。

一个不错的方法是使用角色和权限。您可以仅针对 Member 角色(而不是编辑、审阅者和经理)隐藏工具栏,方法是覆盖工具栏并定义您自己的过滤 ModifyPortalContent 权限的条件。

这里是一个例子,当你开发你自己的插件依赖于z3c.jbot.

  1. toolbar.pt 模板的副本放入插件的 overrides 目录中。这是模板的路径:plone/app/layout/viewlets/toolbar.pt。将新文件重命名为 plone.app.layout.viewlets.toolbar.pt 以使其工作 (see plone docs)。

  2. 自定义模板中的主要条件。

    <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">
    
  3. 添加一些 CSS 以仅针对成员角色删除正文中的填充。

    userrole-member.plone-toolbar-left-default { padding-left:0 }
    

现在为用户提供一些指向 /@@personal-preferences/logout 的新链接,您就完成了。

克隆 5.1(开发): 我使用 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;
}

另外做:

  • 修复工具栏隐藏时的边距(body.userrole-editor.plone-toolbar-top-expanded ....)
  • 显示下拉菜单(登录用户名:useractions)而不是工具栏

在 plone 5.1 中我们有权限 "Show Toolbar".

在您的通用设置配置文件中,添加一个文件 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>

我想要工具栏而不是 contentview 图标和 plone-toolbar-main 中的 link,所以我编辑了我的 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">