gpt4 book ai didi

workflow - Plone 人 4 : restricting published content

转载 作者:行者123 更新时间:2023-12-02 19:40:00 25 4
gpt4 key购买 nike

在 Plone 4.x 安装上,可以

  1. 发布的内容仅限于特定用户/组或
  2. 私有(private)内容是否可以显示在菜单中并搜索未登录的用户?

我有一位客户希望能够拥有只能由特定用户/组查看的内容,但在未登录时会显示在菜单或搜索中。

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

最佳答案

您必须按如下方式自定义工作流程:

  • 进入Zope管理界面->portal_workflow
  • 创建一个新状态,假设为“Trailer”(这是可选的,您可以自定义现有状态...也许私有(private)状态是处理特定用户/组的限制的不错选择)
  • 删除该特定状态下匿名用户除“访问内容信息”之外的所有权限
  • 按下“更新安全设置”按钮

完成!现在,所有处于“预告片”状态的内容将可供匿名用户搜索,但无法查看。

注意:如果您选择创建一个新状态,正如我建议的那样,请务必添加所有需要的转换。

编辑:

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

from zope.interface import Interface
from plone.indexer.decorator import indexer
from AccessControl.PermissionRole import rolesForPermissionOn
from Products.CMFCore.utils import getToolByName
from Products.CMFCore.CatalogTool import _mergedLocalRoles

@indexer(Interface)
def allowedRolesAndUsers(obj):
"""Return a list of roles and users with View permission.

Used by PortalCatalog to filter out items you're not allowed to see.
"""
allowed = {}
for r in rolesForPermissionOn('Access contents information', obj):
allowed[r] = 1
# shortcut roles and only index the most basic system role if the object
# is viewable by either of those
if 'Anonymous' in allowed:
return ['Anonymous']
elif 'Authenticated' in allowed:
return ['Authenticated']
localroles = {}
try:
acl_users = getToolByName(obj, 'acl_users', None)
if acl_users is not None:
localroles = acl_users._getAllLocalRoles(obj)
except AttributeError:
localroles = _mergedLocalRoles(obj)
for user, roles in localroles.items():
for role in roles:
if role in allowed:
allowed['user:' + user] = 1
if 'Owner' in allowed:
del allowed['Owner']
return list(allowed.keys())

然后在同一级别添加一个文件overrides.zcml,内容如下:

<configure xmlns="http://namespaces.zope.org/zope">

<adapter factory=".indexers.allowedRolesAndUsers" name="allowedRolesAndUsers" />

</configure>

最终您的产品树应如下所示:

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

最后一件事,您需要将新创建的 Egg 包含在 buildout.cfg 中:

eggs =
my.package

develop =
src/my.package

重新运行构建。仅此而已。

关于workflow - Plone 人 4 : restricting published content,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9667750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com