2

我使用 Dexterity 创建了一个自定义内容类型,效果很好。此内容应该是可见的,但它的创建者对非特权成员是隐藏的。

我显然可以通过从模板中删除文档署名来实现这一点,但是如果我作为普通成员将“/Creator”附加到内容中,我仍然可以看到创建者。

当然,我可以通过覆盖 Products.CMFDefault.DublinCore.DefaultDublinCoreImpl.Creator() 并引入额外的检查来解决这个问题,但它很脏且无法维护。

在 Dexterity 的上下文中(如果适用),有选择地向非特权用户隐藏内容 DublinCore 元数据的最佳方法是什么?

4

1 回答 1

0

另一个解决方案是为此上下文重新定义 Zope 安全性:

import Globals
from AccessControl import ClassSecurityInfo
from Products.CMFDefault.permissions import ManagePortal

from plone.directives.dexterity import Item


Item.security = ClassSecurityInfo()
Item.security.declareProtected(ManagePortal, 'Creator')

Globals.InitializeClass(Item)

这重新定义了 dexterity.Item 的 'Creator' 方法的安全性,以便只有具有 ManagePortal 权限的用户才能访问此信息。

但是,ajung 指出,这可能会破坏任何对 Creator 方法做出假设但没有找到它的代码,因为它没有所需的权限。它还删除了此方法之前的所有安全声明。

还有其他想法吗?

于 2011-07-12T11:28:21.663 回答