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 に答える