我在 Plone 4.2.4 中有一个灵巧的内容类型,它使用 contenttree 小部件来管理引用的对象,但仅在 editForm 中。
我意识到,引用的项目必须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
匿名用户,则基础目录搜索不返回任何结果。所以我想,我必须使用查看权限来构造某种代理用户。
可以在新创建的视图中使用 aSecurityManager
以其他用户的身份获取结果吗?还是我只是错过了什么?