Workflow Plone 4:限制已发布内容

Workflow Plone 4:限制已发布内容,workflow,plone,Workflow,Plone,在Plone 4.x安装上,可以 发布的内容只能限于某个用户/组或 是否要在菜单和搜索中显示未登录用户的私有内容 我有一位客户希望能够拥有只能由某个用户/组查看的内容,但在未登录时将显示在菜单或搜索中 实现此功能的最佳方法是什么?您必须按以下方式自定义您的工作流: 转到Zope管理界面->门户\工作流 创建一个新的状态,比如“拖车”(这是可选的,您可以定制一个现有的状态……也许私有状态是处理特定用户/组限制的一个好选项) 从处于该特定状态的匿名用户中删除除“访问内容信息”之外的所有权限 按下“

在Plone 4.x安装上,可以

  • 发布的内容只能限于某个用户/组或
  • 是否要在菜单和搜索中显示未登录用户的私有内容 我有一位客户希望能够拥有只能由某个用户/组查看的内容,但在未登录时将显示在菜单或搜索中


    实现此功能的最佳方法是什么?

    您必须按以下方式自定义您的工作流:

    • 转到Zope管理界面->门户\工作流
    • 创建一个新的状态,比如“拖车”(这是可选的,您可以定制一个现有的状态……也许私有状态是处理特定用户/组限制的一个好选项)
    • 从处于该特定状态的匿名用户中删除除“访问内容信息”之外的所有权限
    • 按下“更新安全设置”按钮
    完成了! 现在,处于“拖车”状态的所有内容都可以搜索,但匿名用户无法查看

    注意:如果你选择创建一个新的状态,正如我建议的,一定要添加所有需要的转换

    编辑

    不幸的是,我没有意识到在最近的Plone版本中,portal_catalog()中有一个新的索引,它阻止了上面的过程像以前一样工作。上面的过程仍然正确,不过您需要覆盖默认索引器。 首先使用“plone”模板。然后在包的主级别(例如my.package/my/package)中添加一个名为
    indexers.py
    的文件,其中包含以下内容:

    从zope.interface导入接口
    从plone.indexer.decorator导入索引器
    从AccessControl.PermissionRole导入角色ForPermissionOn
    从Products.CMFCore.utils导入getToolByName
    从Products.CMFCore.CatalogTool导入\u mergedLocalRoles
    @索引器(接口)
    def允许的角色控制器(obj):
    “”“返回具有查看权限的角色和用户的列表。
    PortalCalog用于筛选不允许查看的项目。
    """
    允许={}
    对于r in rolesForPermissionOn(“访问内容信息”,obj):
    允许的[r]=1
    #快捷方式角色,并且仅索引最基本的系统角色(如果对象
    #可由其中任何一方查看
    如果允许输入“匿名”:
    返回['Anonymous']
    允许在以下情况下使用elif“已验证”:
    返回['Authenticated']
    localroles={}
    尝试:
    acl\u users=getToolByName(obj,'acl\u users',无)
    如果acl_用户不是无:
    localroles=acl\u用户。\u getAllLocalRoles(obj)
    除属性错误外:
    localroles=\u合并localroles(obj)
    对于用户,localroles.items()中的角色:
    对于角色中的角色:
    如果允许角色:
    允许的['user:'+user]=1
    如果允许“所有者”进入:
    允许删除[“所有者”]
    返回列表(允许的.keys())
    
    然后在同一级别添加一个文件
    overrides.zcml
    ,如下所示:

    
    
    最后,您的产品树应该如下所示:

    my.package/
    ├── my
    │   ├── __init__.py
    │   └── package
    │       ├── configure.zcml
    │       ├── overrides.zcml
    │       ├── indexers.py
    │       ├── __init__.py
    │       ├── profiles
    │       │   └── default
    │       │       └── metadata.xml
    │       └── tests.py
    ├── README.txt
    ├── setup.cfg
    └── setup.py
    
    最后,您需要在buildout.cfg中包含新创建的egg:

    eggs =
            my.package
    
    develop =
            src/my.package
    

    重新运行buildout。仅此而已。

    菜单和搜索中是否链接了“私有”内容?如果是这样,当匿名用户访问这些链接时会发生什么?“私有”内容只显示给管理员或指定的用户或组。如果匿名用户访问链接,它会按预期重定向到登录页面。我的目标是找到一种方法,使内容显示在菜单和搜索中,但在访问页面或文件夹时重定向到登录。我正在运行Plone 4.1.2,“访问内容信息”似乎对菜单或搜索中显示的项目没有影响。只有当我选中“查看”权限时,它才会显示在菜单或搜索结果中。我尝试了一种自定义状态,同时修改了私有状态,并为匿名用户检查了“访问内容信息”。这一事实是:正如Giacomo所说,您始终需要将“访问内容信息”保持在“视图”的相同配置中。将它们视为唯一的许可@keul听起来你是说视图需要检查。如果这就是您所说的,那么这将创建与已发布状态相同的状态类型,这无法实现所述目标。我完全可能误解了你。你可能正在修改另一个工作流。我刚刚试过,它工作了,菜单中显示私人内容,当你点击它们时,你需要登录@基尔:在这种情况下,将这两个权限分离是关键。@Giacoma我正在尝试使用简单的发布工作流程。那是你用的吗?您能否描述或链接到您在私有状态下设置的权限的屏幕截图?如果我没有在某个地方漏掉一个复选框,那么一定是其他插件破坏了它。