我在Plone 4.2.4中有一個敏捷內容類型,它使用contenttree小部件來管理引用對象,但只在editForm中。Plone 4.2 formwidget contenttree權限
我意識到,所引用的項目必須是external_visible
才能被小部件顯示,這意味着匿名用戶可以使用View
和AccessContentsInformation
。那不是我想要的。所以我挖的contenttree小部件源,並添加以下到我的產品browser/configure.zcml
<include package="Products.CMFCore" file="permissions.zcml"
zcml:condition="installed plone.app.upgrade" />
<browser:page
for="*"
name="contenttree-fetch"
class="my.product.content.bikemetamodel.EditForm"
permission="cmf.ModifyPortalContent"
/>
<adapter factory="my.product.browser.widgets.MetamodellContenttreeAdapter" />
和適配器
class MetamodellContenttreeAdapter(object):
implements(IBikeMetaModel)
adapts(Interface)
def __init__(self, context):
self.context = context
def _get_allowed_modeltypes(self):
return None
def _set_allowed_modeltypes(self, value):
print "setting", value
allowed_modeltypes = property(_get_allowed_modeltypes, _set_allowed_modeltypes)
[...]
但這似乎還不夠。底層目錄搜索不會返回結果,如果權限設置爲拒絕給匿名用戶使用View
和AccessContentsInformation
。所以我想,我必須使用視圖權限來構造某種代理用戶。
如果在新創建的視圖中使用SecurityManager
作爲不同的用戶獲取結果,是否可以?或者我只是想念一些東西?