我有一个基于Dexterity的容器,它容纳在一个基于敏捷的项目中。我需要让Anonymous用户在容器中添加这种类型的对象。
我已经使用以下内容创建了rolemap.xml
文件:
<?xml version="1.0"?>
<rolemap>
<permissions>
<permission name="my.package: Add My Type" acquire="True">
<role name="Anonymous"/>
</permission>
</permissions>
</rolemap>
我在configure.zcml
上声明了权限:
<permission
id="my.package.AddMyType"
title="my.package: Add My Type"
/>
最后我添加了一个像这样的自定义添加视图:
class MyAddView(dexterity.AddForm):
grok.name('MyType')
grok.require('my.package.AddMyType')
表单已经显示给匿名用户但是,当我按下保存按钮时,我被重定向到登录表单。
此外,登录的用户也可以看到表单,这应该不会发生。
我还需要做什么?
答案 0 :(得分:5)
add
类的AddForm
方法:
class MyAddView(dexterity.AddForm):
grok.name('MyType')
grok.require('my.package.AddMyType')
def update(self):
# check here if the user is anonymous and raise exception if not
super(AddView, self).update()
def add(self, object):
container = aq_inner(self.context)
addContentToContainer(container, object, checkConstraints=False)
self.immediate_view = container.absolute_url()
为了更好地理解它,您可能需要查看original code in plone.dexterity。
您可能还需要注意的一件重要事情是,您可能需要修复工作流权限以从其中某些用户中删除所有者角色,或者您也可以使用匿名用户可编辑的内容来结束。