Nella app di esempio "Buoni Vicini" abbiamo visto che Richieste e Prestiti non devono essere eliminabili dopo la consegna dell'Attrezzo al Richiedente o ad un Operatore, perché perderemmo traccia dell'Attrezzo prestato. D'altra parte, la protezione base offerte da Permessi e Ruoli non può variare nel tempo. Per modificare i Permessi sui singoli Contenuti in funzione di eventi che accadono nella app possiamo usare i Workflow.
Cos'è un Workflow
Un Workflow è un tipo di Entità, messo a disposizione dal modulo aggiuntivo Workflow, che quindi deve essere installato ed attivato per poter usare i Workflow nella tua app.
| ATTENZIONE: tra i moduli base installati con Drupal c'è un modulo di nome "Workflows" (con la "s" finale), che però ha funzionalità molto limitate. In questa Guida e nelle successive non utilizzeremo quel modulo, ma il modulo aggiuntivo quasi omonimo "Workflow" (senza la "s" finale), da deve essere installato. |
Un Workflow è uno strumento utile per rappresentare il "ciclo di vita" di un Contenuto, inteso come una sequenza di "stati" attraverso cui il Contenuto passa dalla sua creazione alla sua eliminazione. Il passaggio da uno stato al successivo è provocato da eventi, ad esempio da un comando dato da un Utente. In ogni "stato", i Permessi dei diversi Utenti sul Contenuto possono essere differenti e ciò consente di realizzare Permessi che variano nel tempo. I Workflow assegnano i Permessi RUD (Read, Update, Delete), ma non il Permesso di creazione (Create) che quindi deve essere assegnato coi Permessi base.
Quali Workflow servono
Per identificare quali Workflow servono alla tua app, occorre anzitutto identificare quali tipi di Contenuto hanno Permessi che variano nel tempo: se i Permessi su un tipo di Contenuto non variano nel tempo è molto probabile che non serva un Workflow.
Nella app di esempio Attrezzi, Categorie, Sedi ed Assegnazioni non hanno questa necessità, mentre i Contenuti che rappresentano il prestito (cioè Richieste, Prestiti, Ricevute e Valutazioni) sì. Per questi tipi di Contenuto servono due Workflow distinti:
- un Workflow per Richieste e Prestiti, per impedirne la modifica e l'eliminazione dopo la consegna dell'Attrezzo al Richiedente
- un Workflow per Ricevute e Valutazioni, per impedirne la modifica e l'eliminazione dopo che sono state "firmate" dal loro Autore (passaggio necessario per consentire la correzione di errori di digitazione) o dopo qualche minuto dalla loro creazione (per evitare che restino nella app Ricevute e Valutazioni non confermate)
Come creare e usare i Workflow
Per disegnare ed utilizzare un Workflow occorrono i seguenti passaggi:
in Configurazione - Workflow disegnare il Workflow definendone gli stati, i passaggi tra gli stati ed i Permessi assegnati agli Utenti in ogni stato
In Persone - Permessi regolare i Permessi base per coordinarli coi Permessi gestiti dal Workflow ed autorizzare gli Utenti a usare i Workflow
In Struttura - Tipo di Contenuto applicare il Workflow ad uno o più tipi di Entità o Contenuto
Disegnare il Workflow
Per disegnare un Workflow, in Configurazione - Workflow devi compilare alcuni moduli in cui elencare gli stati, i passaggi da stato a stato ed i Permessi concessi ai diversi Utenti in ogni stato:
| crea il Workflow | In Configurazione - Workflow seleziona Aggiungi Workflow e digita il nome del nuovo Workflow |
| definisci gli stati | In Stati elenca aggiungi gli stati previsti per il Workflow. Di default trovi sempre lo stato fittizio "Creation" in cui si trova l'Entità mentre viene creata |
| definisci i passaggi tra gli stati | In Transizioni attiva le caselle corrispondenti al Ruolo che fa passare l'Entità dallo stato indicato nella riga allo stato indicato in colonna. |
| dai un nome ai comandi per passare da uno stato all'altro | In Transition labels digita in Etichetta i nome dei comandi che fanno transitare tra gli stati indicati. Questa configurazione non è strettamente necessaria, perché i nomi dei comandi possono essere successivamente definiti nelle Viste che utilizzano il Workflow. |
| definisci i Permessi nei diversi stati | In Accesso attiva le caselle corrispondenti ai Ruoli cui, nello stato indicato nella riga, vuoi concedere il Permesso indicato in colonna (View, Edit, Delete). |
Come esempio, disegniamo il Workflow di protezione di Richieste e Prestiti per la app "Buoni Vicini":
| crea il Workflow | In Configurazione - Workflow seleziona Aggiungi Workflow e nominalo "Protezione" |
| definisci gli stati | In Stati aggiungi gli stati "Prima" e "Dopo" la consegna dell'Attrezzo |
| definisci i passaggi tra gli stati | In Transizioni attiva il passaggio Creation → Prima per il solo Autore. Non attivare il passaggio Prima → Dopo perché non viene eseguito dagli Utenti ma automaticamente (1) da Drupal dopo la firma della Ricevuta di consegna. Per i Gestori attiva tutti i passaggi (compreso il ritorno Prima → Dopo), perché servono loro per intervenire a risolvere eventuali situazioni anomale. |
| definisci i Permessi nei vari stati | In Accesso, attiva il Permesso View in entrambi gli stati per tutti gli Utenti; attiva Update e Delete nel solo stato "Prima" per Autore. Disattiva tutti i Permessi dei Visitatori. Attiva tutti i Permessi per i Gestori. |
Disegniamo anche il Workflow per Valutazioni e Ricevute della stessa app:
| crea il Workflow | In Configurazione - Workflow seleziona Aggiungi Workflow e nominalo "Firma" |
| definisci gli stati | In Stati aggiungi gli stati "Bozza" e "Firmata" |
| definisci i passaggi tra gli stati | In Transizioni attiva il passaggio Creation → Bozza per il solo Autore. Attiva passaggio Bozza → Firmata (che corrisponde all'operazione di firma) . Per i Gestori attiva tutti i passaggi (compreso il ritorno Firmata → Bozza), perché servono loro per intervenire a risolvere eventuali situazioni anomale. |
| definisci i Permessi nei vari stati | In Accesso, attiva il Permesso View in entrambi gli stati per tutti gli Utenti; attiva Update e Delete nel solo stato "Bozza" per Autore. Disattiva tutti i Permessi dei Visitatori. Disattiva tutti i Permessi dei Visitatori. Attiva tutti i Permessi per i Gestori. |
Regolare i Permessi base
L'attivazione del modulo Workflow aggiunge un secondo strumento di controllo dei Permessi, che deve essere coordinato coi Permessi base concessi in Persone - Permessi. Vediamo come.
Anzitutto, come abbiamo visto negli esempi, i Workflow non possono assegnare i Permessi di creazione di nuovi Contenuti, che quindi devono essere attivati in Persone - Permessi. Nella app di esempio, in Persone - Permessi attiviamo il Permesso di creazione di Richieste, Prestiti e Valutazioni ai ruoli Partecipante e Gestore ed il Permesso di creazione di Ricevute ai ruoli Partecipante, Operatore e Gestore.
I Workflow possono assegnare ma non togliere i Permessi di modifica ed eliminazione. Quindi per poter regolare la modifica o l'eliminazione in un Workflow occorre prima disattivare i Permessi di modifica e eliminazione in Persone - Permessi e poi concederli nella configurazione Accesso del Workflow. Pertanto, nella app di esempio, disattiviamo in Persone - Permessi i Permessi di modifica ed eliminazione di Utenti autenticati, Partecipanti ed Operatori su Richiesta, Prestito, Ricevuta e Valutazione.
In Persone - Permessi occorre infine autorizzare la partecipazione ai Workflow per i diversi Ruoli, attivando il Permesso NOMEWORKFLOW: Participate in workflow). Nella app di esempio, attiviamo il Permesso "Firma: Participate in workflow" per i Ruoli Partecipante, Operatore e Gestore e il Permesso "Protezione: Participate in workflow" per i Ruoli Partecipante e Gestore.
| APPROFONDIMENTO: Il modulo Workflow è solo uno dei numerosi moduli aggiuntivi che modificano i Permessi degli Utenti sui Contenuti. Quasi tutti questi moduli lavorano come il modulo Workflow e quindi aggiungono Permessi ma non li tolgono. Se si attiva più di un modulo aggiuntivo di gestione dei Permessi, il risultato può cambiare in base all'ordine temporale con cui i diversi moduli vengono eseguiti da Drupal: se il risultato non è quello atteso, si può cambiare l'ordine di esecuzione dei diversi moduli modificando un apposito parametro numerico nella configurazione dei moduli. Per il modulo Workflow questo parametro è modificabile in Configurazione - Workflow - Access settings - Workflow Access Priority. In generale, non è consigliabile attivare più di un paio di moduli di gestione di Permessi nella stessa installazione di Drupal. |
Applicare il Workflow
Per applicare un Workflow ad un tipo di Contenuto, basta aggiungere a quel tipo un Campo di tipo Workflow State, specificando il Workflow che si intende applicare.
Nella app di esempio "Buoni Vicini", aggiungiamo al tipo Richiesta un Campo Workflow di nome "Stato", specificando il Workflow "Protezione"; lo stesso per il tipo Prestito; anche ai tipi Ricevuta e Valutazione aggiungiamo un Campo Workflow di nome "Stato", specificando stavolta il Workflow "Firma".
Dopo l'applicazione di un Workflow (e talvolta anche dopo aver cambiato la configurazione di un Workflow) può rendersi necessaria la ricostruzione dei Permessi sulle Entità: in questo caso, Drupal mostra un messaggio all'Amministratore, che contiene il link da cliccare per ricostruire i Permessi su tutti i Contenuti. In caso di dubbi, puoi sempre lanciare la ricostruzione col comando Resoconti - Resoconto sullo Stato - Rebuild permissions.
| ATTENZIONE: le protezioni del Workflow valgono per i Contenuti aggiunti successivamente all'applicazione del Workflow al loro Tipo. Per gli eventuali Contenuti preesistenti all'applicazione del Workflow occorre inizializzare lo stato: a questo scopo conviene creare una Vista di tipo VBO (riservata all'Amministratore) in cui selezionare tutte le Entità esistenti e definirne massivamente il valore iniziale del Campo Workflow. |
Per cambiare lo stato di un Contenuto basta cambiare il valore del suo Campo Workflow: Drupal presenta all'Utente solo gli stati per cui è prevista nel Workflow una transizione dallo stato corrente del Contenuto. Per cambiare il valore del Campo Workflow, l'Utente deve avere il Permesso di modifica del Contenuto. Nella app di esempio, il Partecipante o l'Operatore può modificare una propria Ricevuta fintanto che il Campo Stato vale "Bozza". Se modifica il valore del Campo Stato in "Firmata", la Ricevuta diventa immodificabile.
Vedremo in una prossima Guida come costruire la procedura che cambia automaticamente lo Stato di Ricevute e Valutazioni in "Firmata" dopo un certo tempo dalla loro creazione e la procedura che cambia automaticamente lo Stato di Richieste e Prestiti in "Dopo" dopo la firma delle Ricevute di consegna dell'Attrezzo al Richiedente.