Workflow Plone 4:限制已发布内容
在Plone 4.x安装上,可以Workflow Plone 4:限制已发布内容,workflow,plone,Workflow,Plone,在Plone 4.x安装上,可以 发布的内容只能限于某个用户/组或 是否要在菜单和搜索中显示未登录用户的私有内容 我有一位客户希望能够拥有只能由某个用户/组查看的内容,但在未登录时将显示在菜单或搜索中 实现此功能的最佳方法是什么?您必须按以下方式自定义您的工作流: 转到Zope管理界面->门户\工作流 创建一个新的状态,比如“拖车”(这是可选的,您可以定制一个现有的状态……也许私有状态是处理特定用户/组限制的一个好选项) 从处于该特定状态的匿名用户中删除除“访问内容信息”之外的所有权限 按下“
实现此功能的最佳方法是什么?您必须按以下方式自定义您的工作流:
- 转到Zope管理界面->门户\工作流
- 创建一个新的状态,比如“拖车”(这是可选的,您可以定制一个现有的状态……也许私有状态是处理特定用户/组限制的一个好选项)
- 从处于该特定状态的匿名用户中删除除“访问内容信息”之外的所有权限
- 按下“更新安全设置”按钮
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我正在尝试使用简单的发布工作流程。那是你用的吗?您能否描述或链接到您在私有状态下设置的权限的屏幕截图?如果我没有在某个地方漏掉一个复选框,那么一定是其他插件破坏了它。