2014-04-22 15 views
5

Possiedo un contenitore basato sulla destrezza che contiene un elemento basato sulla destrezza. Devo consentire agli utenti anonimi di aggiungere oggetti di questo tipo all'interno del contenitore.Consenti agli utenti anonimi di aggiungere oggetti di destrezza

ho già creato un file rolemap.xml con il seguente:

<?xml version="1.0"?> 
<rolemap> 
    <permissions> 
    <permission name="my.package: Add My Type" acquire="True"> 
     <role name="Anonymous"/> 
    </permission> 
    </permissions> 
</rolemap> 

ho dichiarato l'autorizzazione per configure.zcml:

<permission 
    id="my.package.AddMyType" 
    title="my.package: Add My Type" 
    /> 

e alla fine ho aggiunto un componente aggiuntivo personalizzato vista come questo:

class MyAddView(dexterity.AddForm): 
    grok.name('MyType') 
    grok.require('my.package.AddMyType') 

il modulo è già presente per noi anonimi ma, quando premo il pulsante Salva, sono reindirizzato al modulo di accesso.

anche gli utenti registrati possono vedere il modulo e questo non dovrebbe accadere.

cos'altro devo fare?

risposta

5

grazie a David Glick, che mi ha guidato, ho finito con una soluzione molto semplice che coinvolge il metodo add della classe 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() 

per capire meglio, si consiglia di dare un'occhiata a il original code in plone.dexterity.

una cosa importante che si può anche notare è che, probabilmente, è necessario fissare le autorizzazioni del flusso di lavoro per rimuovere proprietario ruolo da alcuni di loro, o si potrebbe finire con il contenuto modificabile dagli utenti anonimi anche.

Problemi correlati