Infocurci - programmatore Php Roma
Infocurci - programmatore Php Roma
"faster than 98% of all tested websites" (tools.pingdom.com) - 100/100 Google PageSpeed Insights - Benvenuti :)

Magento : Aggiungere permessi ad un componente

Su Magento 1 bastano alcune righe di codice xml per collegare le nostre estensioni alla gestione dei diritti di accesso di Magento. L'amministratore del sito potrà cosi decidere in piena autonomia, attraverso il pannello dei permessi, quali collaboratori autorizzare all'utilizzo dei componenti che abbiamo sviluppato.

Magento

Attraverso il menu Sistema / Permessi /Ruoli è possibile creare delle nuove figure amministrative con poteri limitati ad una o più funzioni. L'amministratore può cosi organizzare il proprio team di lavoro attribuendo ad esempio agli addetti al magazzino poteri di accesso alle schede prodotti ma non a quelle delle vendite, e viceversa per i collaboratori che si dovranno occupare delle questioni contabili.

L'integrazione di componenti aggiuntivi che ci troviamo a sviluppare per i nostri clienti con l'Acl di Magento è operazione relativamente semplice. Bisogna prestare attenzione in fase progettuale all'organizzazione dei controller e, in fase di scrittura codice, alla solita precisione richiesta dai file di configurazione xml.

In particolare dovremo sviluppare i  nostri componenti cercando di isolare le diverse funzionalità in modo che a ciascuna di esse corrisponda 1 diritto di accesso , 1 voce di menu, 1 controller.

Se ad esempio dobbiamo sviluppare un componente chiamato "spedizioni", che deve cosentire all'amministratore di caricare i feed di testo forniti dai vari corrieri per il tracking, sarà bene organizzare il nostro codice con 1 controller per ciascun corriere. In questo modo l'amministratore potrà decidere di assegnare ad un collaboratore le spedizioni di Gls, ad un altro le spedizioni di Brt e cosi via.

Una volta sviluppati i controller, potremo aggiungere nel file etc/config.xml queste righe

<adminhtml>
        <menu>
            <spedizioni_menu1 translate="title" module="spedizioni">
                <title>Spedizioni </title>
                <sort_order>20</sort_order>
                <children>
                    <item1 module="spedizioni">
                        <title>Carica spedizioni GLS</title>
                        <action>adminhtml/spedizioni</action>
                    </item1>
                </children>
            </spedizioni_menu1>
        </menu>
         <acl>
            <resources>
                <admin>
                    <children>    <spedizioni_menu1 translate="title">
                            <title>Spedizioni</title>
                            <children>
                                <item1 translate="title">
                                    <title>Carica spedizioni GLS</title>
                                </item1>
                            </children>
                        </spedizioni_menu1>
                    </children>
                </admin>
            </resources>
        </acl>
    </adminhtml>

La prima parte, <menu>, crea nel pannello di amministrazione di Magento una nuova voce di menu chiamata appunto "spedizioni". Attraverso il nodo <children> creiamo un sotto-menu che richiamerà (in questo caso, a puro titolo di esempio) il controller /app/code/local/Infocurci/Spedizioni/controllers/Adminhtml/SpedizioniController.php. Possiamo creare una voce di menu per ciascun controller del nostro applicativo.

La seconda parte, <acl>, fornisce all'amministratore del sito le voci con cui controllare i diritti di accesso. Come potete vedere è importante che i nomi per i vari nodi (spedizioni_menu1, item1) coicindano con quelli utilizzati per le voci di menu.

In questo modo l'amministratore potrà controllare i vari diritti di accesso:

Infine, dobbiamo aggiungere nel nostro controller il codice che "fa capire" a magento di verificare il diritto di accesso prima di dare accesso al codice. E' sufficiente aggiungere questa istruzione

protected function _isAllowed()
    {
        return Mage::getSingleton('admin/session')->isAllowed('spedizioni_menu1/item1');
    }

attenzione al parametro di isAllowed ("spedizioni_menu1/item1") che come vedete utilizza la stessa nomenclatura usata per il menu.