Indice

🟦Nuova 🟩Pronta 🟨Bozza 🟥Da scrivere

Protezioni che cambiano nel tempo coi Workflow

Usare i Workflow per variare nel tempo le protezioni sulle Entità
Moduli: Workflow
Aggiornata il:
Stato: 🟩Pronta

Se nella tua app i Permessi sulle informazioni cambiano nel tempo, ad esempio a fronte di nuove informazioni caricate dagli Utenti o di eventi identificati autonomamente da Drupal (es. "dopo X giorni dalla creazione di un Contenuto"), potresti usare i Workflow per gestire le variazioni dei Permessi.

Ad esempio, nella app "Vicinato" abbiamo visto che le Richieste non possono essere eliminate dopo la prima Consegna dell'Attrezzo, mentre Consegne e Valutazioni non devono essere modificate dopo la loro accettazione o firma. 

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.

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. Probabilmente ti serve un Workflow per ogni tipo di Contenuto i cui Permessi cambiano nel tempo. Se per due tipi di Contenuto i Permessi variano nello stesso modo, verifica se puoi applicare lo stesso Workflow ad entrambi.

Nella app di esempio "Vicinato" per i Contenuti che rappresentano informazioni sostanzialmente "statiche" - Attrezzi, Categorie, Sedi, Abilitazioni e Note - sono sufficienti le protezioni base offerte da Permessi e Ruoli, mentre per i Contenuti che evolvono nel tempo (le Richieste) e per quelli che richiedono una conferma (Consegne e Valutazioni) utilizzeremo Workflow.

Come creare e usare i Workflow

Per creare ed usare un Workflow occorrono i seguenti passaggi:

disegna il workflowIn Configurazione - Workflow definisci gli stati, i passaggi tra gli stati ed i Permessi assegnati agli Utenti in ogni stato 
abilita gli utenti al workflowIn Persone - Permessi regola i Permessi base per coordinarli coi Permessi gestiti dal Workflow ed autorizzare gli Utenti a usare i Workflow
applica il workflow alle EntitàIn Struttura - Tipo di Contenuto applica il workflow ad uno o più tipi di Entità, aggiungendo un Campo di tipo workflow
cambia lo stato di una EntitàNella pagina di modifica dell'Entità cambia il valore del Campo workflow.

Disegnare il Workflow

Per disegnare un Workflow, in Configurazione - Workflow dobbiamo fornire le informazioni relative agli stati, ai passaggi tra gli stati ed ai Permessi dei diversi Utenti in ogni stato:

Come esempio, disegniamo il Workflow delle Richieste per la app "Vicinato". Alla creazione, una Richiesta è "aperta" ed è modificabile e eliminabile. Mentre è "aperta" può essere "annullata". Diventa "in corso" e non più modificabile ed eliminabile quando l'Attrezzo viene consegnato al Richiedente. Diventa "conclusa" quando l'Attrezzo è tornato al Proprietario.

Workflow Consegna: Alla creazione, una Consegna è "In consegna" ed è modificabile e eliminabile. Diventa "Consegnato" e non più modificabile ed eliminabile quando la Consegna viene accettata dal destinatario dell'Attrezzo

Workflow Valutazione: Alla creazione, una Valutazione è "bozza" ed è modificabile e eliminabile. Diventa "firmata" e non più modificabile ed eliminabile quando la Valutazione viene firmata dal valutatore

Da questi esempi possiamo dedurre una osservazione generale sulle transizioni in un Workflow: 

  • se la transizione è comandata da un Utente che può modificare l'Entità, aggiungiamo al Workflow la transizione e Drupal mostrerà all'Utente il comando di cambio di stato nella pagina di modifica dell'Entità (es. il comando "firma" sulla Valutazione, che la fa passare da "bozza" a "firmata").
  • se la transizione è comandata da un Utente che NON può modificare l'Entità, non aggiungiamo al Workflow la transizione e costruiamo una procedura ECA che espone all'Utente un link che, cliccato, esegue il cambio di stato (es. il comando "Accetta" sulla Consegna, che la fa passare da In consegna" ad "Consegnato")
  • se la transizione è comandata da un evento che accadde nella app, non aggiungiamo al Workflow la transizione e costruiamo una procedura ECA che esegue la transizione quando occorre quell'evento (es. la accettazione di una Consegna fa passare la Richiesta da "aperta" a "in corso").

Abilitare gli Utenti al workflow

L'attivazione del modulo Workflow aggiunge uno strumento di controllo dei Permessi, che deve essere coordinato coi Permessi base concessi in Persone - Permessi tenendo conto che:

Applicare il Workflow alle Entità

Per applicare un Workflow ad un tipo di Contenuto, basta aggiungervi un Campo di tipo Workflow State, specificando il Workflow che si intende applicare.  

Nella app di esempio "Vicinato", aggiungiamo al Tipo di Contenuto "Richiesta" uno Campo Workflow di nome "Stato", specificando il Workflow "Richiesta". Analogamente aggiungiamo un Campo Workflow a Consegna e Valutazione, sempre di nome "Stato" e specificando per ognuno il Workflow corrispondente.

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.

Cambiare lo stato di una Entità

Per cambiare lo stato di una Entità, l'Utente modifica il valore del Campo Workflow: Drupal presenta all'Utente solo gli stati per cui è prevista nel Workflow una transizione dallo stato corrente dell'Entità. Per cambiare il valore del Campo Workflow, l'Utente deve avere il Permesso di modificare l'Entità. 

Se però nel nuovo stato in cui l'Utente porta l'Entità l'Utente stesso non ha più il Permesso di modifica, non potrà più neppure cambiarne lo stato. Ad esempio, nella app "Vicinato" un Partecipante può modificare una propria Valutazione fintanto che il Campo Stato vale "Bozza"; dopo che il Campo Stato è passato a "Firmata", la Valutazione diventa immodificabile anche per lui.

Lo stato può essere modificato anche da Drupal, mediante procedure automatiche che modificano il valore del Campo Workflow. Vedremo ad esempio come costruire la procedura che cambia automaticamente lo Stato di Richieste quando vengono accettate le Consegne di inizio e fine prestito. Le procedure automatiche possono essere costruire in modo da superare i Permessi e quindi forzare un cambio di stato non (più) possibile agli Utenti.