2014-04-22 21 views
5

我有一個基於敏捷的容器,它包含一個基於敏捷的項目。我需要讓匿名用戶在容器中添加這種類型的對象。允許匿名用戶添加敏捷對象

我已經創建了一個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') 

表單已經顯示爲匿名我們但是,當我按下保存按鈕時,我被重定向到登錄表單。

此外,登錄用戶也能夠看到表單,這應該不會發生。

我還需要做什麼?

回答

5

感謝大衛·格里克,誰引導我,我結束了涉及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。您可能還注意到

一個重要的事情是,你可能需要修復您的工作流程的權限,從他們中的一些去除所有者角色,或者你可以用內容由匿名用戶也可編輯結束。