Bookmark and Share
Document Actions

Definire nuovi permessi e ruoli
medio

Questo how-to illustra come creare dei permessi, dei ruoli e proteggere delle viste Zope 3 in un prodotto Plone che stiamo utilizzando.

Supponiamo per esempio di dover definire un nuovo permesso, utilizzato per restringere l'accesso a certe funzionalità solo ad utenti che abbiano un determinato ruolo.

 

Definire il permesso

Per prima cosa dovremo definire il permesso, scrivendo il seguente codice nel file permissions.py nella root del nostro prodotto:

from Products.CMFCore.permissions import setDefaultRoles

MANAGE_WORKGROUP = 'redomino.workgroup: manage Workgroups'
setDefaultRoles(MANAGE_WORKGROUP, ('Manager',))

Poi bisogna includerlo nell'__init__.py:

from redomino.workgroup import permissions
...

dove per redomino.workgroup si intende il nome del nostro package che andremo a sviluppare.

 

Definire un nuovo ruolo

Per definire la creazione di un nuovo ruolo ed associarlo a dei permessi possiamo utilizzare Generic Setup e scrivere in rolemap.xml, nel profilo del nostro prodotto, il seguente codice:

<rolemap>
    <roles>
        <role name="Workgroup manager"/>
    </roles>
    <permissions>
        <permission name="redomino.workgroup: manage Workgroups" acquire="True">
            <role name="Workgroup manager"/>
            <role name="Manager"/>
        </permission>
    </permissions>
</rolemap>

Il seguente link porta ad una utile guida per l'utilizzo di Generic Setup (in lingua inglese) nei propri prodotti.

 

Proteggere la nostra vista Zope 3

Ora proteggeremo la nostra vista, su cui saranno presenti logiche ristrette solo a certi utenti privilegiati.

Per prima cosa andremo ad associare il nostro permesso Zope2/CMF ad un ID richiamabile dai nostri file zcml, che scriveremo successivamente. Per fare ciò dobbiamo definire il file permissions.zcml:

<configure xmlns="http://namespaces.zope.org/zope"
           i18n_domain="redomino.workgroup">
  <permission id="redomino.workgroup.ManageWorkgroups"
              title="redomino.workgroup: manage Workgroups" />
</configure>

Dove:

  • title rappresenta il pemesso conosciuto da Zope2/CMF che abbiamo definito in permissions.py;
  • id è una chiave univoca associata al permesso.

Nel browser/configure.zcml andremo ad includere il nostro file permissions.zcml appena definito:

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser"
    i18n_domain="redomino.workgroup">
    <include file="../permissions.zcml" />
    <browser:page
        name="enable-workgroup-mode"
        for="Products.Archetypes.interfaces._base.IBaseFolder"
        class=".form.WorkgroupForm"
        permission="redomino.workgroup.ManageWorkgroups"
        />
</configure>

Da notare che proteggiamo la nostra vista andando a definire nell'attributo permission l'ID definito e non direttamente il permesso. Questo modo di procedere ci consente di cambiare i permessi SENZA toccare codice Python, andando a modificare o customizzare  invece un semplice file di configurazione zcml (permissions.zcml), favorendo così la mantenibilità e la riusabilità del codice.

by Davide Moro last modified 2008-12-03 11:52
 

Supporto

Ottieni un
aiuto veloce e mirato sul forum, gratis!

partecipa al forum

 

Segui le icone

 

Livelli di difficoltà

livello guruSolo per i "guru"!
livello avanzatoPer configuratori e sviluppatori
livello medioPer chi ha già familiarità
livello basePer tutti!

 

I video

video

Il documento è supportato da un video!