【问题标题】:Allow Anonymous users to add Dexterity objects允许匿名用户添加敏捷对象
【发布时间】:2014-04-22 22:06:44
【问题描述】:

我有一个基于敏捷的容器,它包含在基于敏捷的项目中。我需要让匿名用户在容器内添加这种类型的对象。

我已经创建了一个 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')

表单已经为匿名用户显示,但是当我按下保存按钮时,我被重定向到登录表单。

此外,登录用户也可以看到表单,这应该不会发生。

我还需要做什么?

【问题讨论】:

    标签: plone dexterity


    【解决方案1】:

    感谢指导我的 David Glick,我最终得到了一个非常简单的解决方案,涉及 AddForm 类的 add 方法:

    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

    您可能还需要注意的一件重要事情是,您可能需要修复您的工作流程权限以从其中一些角色中删除 Owner 角色,或者您也可以以匿名用户可编辑的内容结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多