我使用Dexterity创建了一个自定义内容类型,工作正常。此内容应该是可见的,但其创建者对未被特权的成员保持隐藏。
我显然可以通过从模板中删除文档 - 副行来实现这一点,但如果我作为普通成员附加到内容的'/ Creator',我仍然可以看到创建者。
我可以通过覆盖Products.CMFDefault.DublinCore.DefaultDublinCoreImpl.Creator()来解决这个问题,然后引入一个额外的检查,但它很脏且不可维护。
在敏捷(如果适用)的情况下,选择性地隐藏来自非特权用户的内容DublinCore元数据的最佳方法是什么?
答案 0 :(得分: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)
这重新定义了“创造者”灵巧方法的安全性。这样 只有具有ManagePortal权限的用户才能访问此权限 信息。
然而,ajung指出,这可能会破坏任何对Creator方法做出假设并且找不到它而没有所需权限的代码。它还会删除此方法的所有先前安全声明。
还有其他想法吗?