<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>AiutoSuListeControlloAccesso</title></articleinfo><section><title>Liste di Controllo dell'Accesso</title><para>Qualora siano attivale le Access Control Lists, ACL in breve, è possibile controllare chi può può intervenire su una pagina wiki e con che modalità. </para><section><title>Contenuti</title></section><section><title>Fondamenti</title><para>Per usare le ACL con <ulink url="http://wiki.ninux.org/AiutoSuListeControlloAccesso/MoinMoin#">MoinMoin</ulink> è sufficiente includere una particolare linea di controllo in cima alla pagina che desideri, ad esempio: </para><screen><![CDATA[#acl QualcheUtente:read,write All:read]]></screen><para>Questo consentirà a <code>QualcheUtente</code> di leggere e scrivere quella pagina, mentre potrà essere solo letta da chiunque altro (a meno ché non si configurato in maniera particolare il sito). </para></section><section><title>Sintassi</title><para>Ogni riga può avere questa sintassi: </para><screen><![CDATA[#acl [+-]Utente[,QualcheGruppo,...]:[permesso[,permesso,...]] [[+-]AltroUtente:...] [[+-]Known:...] [[+-]All:...] [Default]]]></screen><para>Where: </para><itemizedlist><listitem><para><emphasis role="strong">Utente</emphasis> è il nome dell'utente e viene applicata solo se i nomi combaciano. </para></listitem><listitem><para><emphasis role="strong">QualcheGruppo</emphasis> indica una pagina che corrisponde all'espressione regolare <code>page_group_regex</code> (vedi <link linkend="Configurazione">#Configurazione</link>) e che contiene delle righe nel formato &quot; * Membro&quot; (vedi <link linkend="Gruppi">#Gruppi</link>). </para></listitem><listitem><para><emphasis role="strong">Known</emphasis> è un gruppo speciale che contiene tutti gli utenti registrati. </para></listitem><listitem><para><emphasis role="strong">All</emphasis> è un gruppo speciale che contiene tutti (sia gli utenti registrati che quelli anonimi). </para></listitem><listitem><para><emphasis role="strong">Default</emphasis> è una voce particolare che viene sostituita con le impostazioni prese da <code>acl_rights_default</code> (vedi <link linkend="Default">#Default</link>). </para></listitem><listitem><para><emphasis role="strong">permesso</emphasis> è una parola tipo read, write, delete, admin. Solo le parole elencate in <code>acl_rights_valid</code> verranno accettate, le altre saranno ignorate. È consentito non specificare nessun permesso, a significare che non ne viene concesso alcuno. </para></listitem></itemizedlist></section><section><title>Permessi disponibili</title><para>Questi sono i permessi disponibili che puoi utilizzare nelle regole ACL: </para><glosslist><glossentry><glossterm>read</glossterm><glossdef><para>Gli utenti specificati possono leggere il testo della pagina. </para></glossdef></glossentry><glossentry><glossterm>write</glossterm><glossdef><para>Gli utenti specificati potranno modificare il contenuto della pagina. </para></glossdef></glossentry><glossentry><glossterm>delete</glossterm><glossdef><para>Gli utenti specificati potranno cancellare la pagina e gli allegati. </para></glossdef></glossentry><glossentry><glossterm>admin</glossterm><glossdef><para>Gli utenti specificati sono gli amministratori della pagina. Questo significa che potranno cambiare le impostazioni ACL, compreso dare o togliere lo stato di amministratore agli altri utenti. </para></glossdef></glossentry></glosslist></section><section><title>Logica di funzionamento</title><para>Quando qualcuno accede a una risorsa protetta dalle ACL, i controlli del caso verranno eseguiti nell'ordine in cui sono specificati. La <emphasis role="strong">prima regola ACL che viene soddisfatta</emphasis> indica se l'utente ha o meno il permesso di accedervi. </para><para><inlinemediaobject><imageobject><imagedata depth="16" fileref="http://wiki.ninux.org//moin_static197/ninuxtheme02/img/idea.png" width="16"/></imageobject><textobject><phrase>(!)</phrase></textobject></inlinemediaobject> A causa dell'algoritmo della <emphasis>prima regola</emphasis>, devi mantenere un certo ordine nello specificare le ACL: prima i singoli utenti, poi i gruppi speciali, quindi i gruppo generici, <code>Known</code> e infine <code>All</code>. </para><para>Ad esempio, la seguente ACL specifica che <code>QualcheUtente</code> può leggere e scrivere la pagina coperta da quelle regole, mentre i membri di <code>QualcheGruppo</code> (compreso <code>QualcheUtente</code>, se vi fa parte) può amministrarne i permessi; tutti gli altri possono leggerla. </para><screen><![CDATA[#acl QualcheUtente:read,write QualcheGruppo:read,write,admin All:read]]></screen><para>Per rendere il sistema più flessibile, si possono utilizzare dei modificatori: i prefissi '+' e '-'. Quando vengono usati, quella particolare regola verrà soddisfatta solo quando l'utente <emphasis role="strong">richiede</emphasis> quei <emphasis role="strong">particolari</emphasis> permessi. Ad esempio, la ACL precedente si potrebbe scrivere anche così: </para><screen><![CDATA[#acl -QualcheUtente:admin QualcheGruppo:read,write,admin All:read]]></screen><para>O anche: </para><screen><![CDATA[#acl +All:read -QualcheUtente:admin QualcheGruppo:read,write,admin]]></screen><para>La seconda e la terza forma vengono raramente usate per specificare i permessi di una pagina wiki, ma possono essere utili nella configurazione globale del sito. </para><para><anchor id="Default"/> </para></section><section><title>Utilizzo dei permessi di default</title><para>Qualche volta può essere utile dare a qualcuno un certo permesso senza per questo ignorare le impostazioni globali del sito. Ad esempio, supponiamo di avere le seguenti regole nella configurazione: </para><screen><![CDATA[acl_rights_default = "GruppoFidato:read,write,delete All:read"
acl_rights_before  = "GruppoAdmin:admin,read,write,delete +GruppoFidato:admin"]]></screen><para>Ora diciamo di voler dare a <code>QualcheUtente</code> il permesso di scrittura, ma di voler anche mantenere il comportamento specificato per All e per <code>GruppoFidato</code>. Questo è facilmente ottenibile usando la speciale regola <emphasis role="strong">Default</emphasis>: </para><screen><![CDATA[#acl QualcheUtente:read,write Default]]></screen><para>Questo inserirà le regole impostate in <code>acl_rights_default</code> esattamente dove appare la parola Default. In altri termini, la regola qui sopra con la configurazione indicata è equivalente a questa regola:  </para><screen><![CDATA[#acl QualcheUtente:read,write GruppoFidato:read,write,delete All:read]]></screen><para>Sebbene raggiungano lo stesso risultato, sfruttando i valori di default si ha il vantaggio che eventuali modifiche a quelle impostazioni verranno applicate automaticamente. </para><para><anchor id="Configurazione"/> </para></section><section><title>Configurazione</title><para>Queste sono le impostazioni relative alle ACL che possono essere modificate su un sito <ulink url="http://wiki.ninux.org/AiutoSuListeControlloAccesso/MoinMoin#">MoinMoin</ulink>. </para><informaltable><tgroup cols="3"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para><emphasis role="strong">Voce</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Default</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Descrizione</emphasis></para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>acl_enabled</para></entry><entry colsep="1" rowsep="1"><para><code>0</code></para></entry><entry colsep="1" rowsep="1"><para>true indica che il supporto per le ACL è abilitato.</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>acl_rights_before</para></entry><entry colsep="1" rowsep="1"><para><code>&quot;&quot;</code></para></entry><entry colsep="1" rowsep="1"><para>applicate <emphasis role="strong">prima</emphasis> delle regole della pagina o di quelle di default</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>acl_rights_after</para></entry><entry colsep="1" rowsep="1"><para><code>&quot;&quot;</code></para></entry><entry colsep="1" rowsep="1"><para>applicate <emphasis role="strong">dopo</emphasis> delle regole della pagina o di quelle di default</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>acl_rights_default</para></entry><entry colsep="1" rowsep="1"><para><code>&quot;Known:read,write,delete All:read,write&quot;</code></para></entry><entry colsep="1" rowsep="1"><para>usate <emphasis role="strong">esclusivamente</emphasis> quando <emphasis role="strong">nessun'altra</emphasis> regola ACL è specificata dalla pagina in questione</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>acl_rights_valid</para></entry><entry colsep="1" rowsep="1"><para><code>[&quot;read&quot;, &quot;write&quot;, &quot;delete&quot;, &quot;admin&quot;]</code></para></entry><entry colsep="1" rowsep="1"><para>Questi sono i permessi accettati (riconosciuti) e dove eventualmente estenderli, se necessario.</para></entry></row></tbody></tgroup></informaltable><para>Cosa <emphasis>significa</emphasis> tutto questo? </para><itemizedlist><listitem><para>&quot;before&quot; rappresenta i permessi <emphasis role="strong">garantiti</emphasis> (per il meccanismo della prima regola) </para></listitem><listitem><para>&quot;after&quot; indica i permessi da <emphasis role="strong">non tralasciare</emphasis> per sbaglio (come ad esempio dare il permesso di lettura a tutti) </para></listitem><listitem><para>&quot;default&quot; indica i permessi applicati <emphasis role="strong">quando la pagina non contiene alcuna regola ACL</emphasis>. Equivale a scrivere esattamente queste regole nella pagina. </para></listitem></itemizedlist><para><anchor id="Gruppi"/> </para></section><section><title>Gruppi</title><para>Raggruppare gli utenti rende più facile gestire i permessi quando il numero di utenti è elevato.  </para><para>Solo gli amici di <code>QualcheUtente</code> possono leggere e modificare la pagina: </para><screen><![CDATA[#acl QualcheUtente:read,write QualcheUtente/GruppoAmici:read,write]]></screen><para><code>QualcheUtente/GruppoAmici</code> a sua volta è una pagina della quale ogni elemento della lista al primo livello rappresenta il nome di un utente del sito wiki da considerare appartenente a quel gruppo: </para><screen><![CDATA[#acl QualcheUtente:read,write,admin,delete
 * PaoloVerdi
 * MarioBianchi
 * RodolfoRossi]]></screen><para>La pagina <code>GruppoAdmin</code> (che soddisfi l'espressione regolare config.page_group_regex) può definire un gruppo con quel nome e a sua volta può essere protetta con le regole ACL: </para><screen><![CDATA[#acl GruppoAdmin:admin,read,write All:read
 * QualcheUtente
 * AltroUtente
   * Questa voce viene ignorata
Qualsiasi testo esterno alla lista di primo livello viene ignorato.]]></screen><para>Puoi configurare quali nomi di pagina debbano essere considerati delle definizioni di gruppo (ad esempio per wiki in lingue diverse dall'inglese): </para><screen><![CDATA[page_group_regex =  '^Gruppo.*'    # questo è adatto all'italiano]]></screen></section><section><title>Esempi di utilizzo</title><section><title>Un wiki pubblico su Internet</title><para>Il concetto fondamentale in questo caso è utilizzare le ACL solo quando dove sia realmente necessario. Generalmente i siti wiki si basano sulla libera accessibilità e modificabilità dei contenuti. I vincoli di sicurezza sono perciò minimi, limitati alla rimozione di materiale improprio. Per questi motivi non è spesso necessario utilizzare le ACL: utilizzandole a sproposito rischieresti di compromettere la filosofia stessa di un sito wiki. </para><para>Questo è il motivo per cui le ACL non dovrebbero essere utilizzare (di default è così) oppure, qualora si decida di farlo, il file wikiconfig.py dovrebbe contenere qualche cosa del tipo: </para><screen><![CDATA[acl_rights_before = 'NomeResponsabileWiki:read,write,admin,delete +GruppoAdmin:admin ImbrattatatoreSiti:' ]]></screen><para>L'impostazione di default per <code>acl_rights_default</code> dovrebbe essere adatta: </para><screen><![CDATA[acl_default = 'Known:read,write,delete All:read,write' ]]></screen><para>Un buon consiglio è di avere solo pochi e ben fidati amministratori del wiki raggruppati nel <code>GruppoAdmin</code> (che devono avere una buona conoscenza di come funziona un wiki perché altrimenti potrebbe senza volerlo comprometterne il senso stesso, che sta nell'essere <emphasis>aperto</emphasis>, non chiuso a chiave!). </para><para>Se usi il <code>GruppoAdmin</code> devi perciò creare una pagina <code>GruppoAdmin</code> elencandovi le persone che avranno i permessi di amministrazione. </para><para>Specificando l'<code>ImbrattatatoreSiti</code> come mostrato sopra in pratica lo si <emphasis>chiude fuori</emphasis>: non potrà né leggere né tantomeno scrivere nulla da quel account. Questo ha senso solo quando si tratta di una misura temporanea, altrimenti tanto varrebbe eliminare il suo account. Naturalmente questo <code>ImbrattatatoreSiti</code> può accedere anche come anonimo, così questa non è una protezione molto efficace (e qui entra in ballo la <emphasis>sicurezza leggera</emphasis>). </para></section><section><title>Il wiki come un semplice CMS</title><para>Se vuoi utilizzare il wiki come una maniera semplice per pubblicare contenuti sul web ma non desideri che sia pubblicamente modificabile (cioè vuoi permettere solo a alcuni webmaster di farlo), puoi inserire queste impostazioni nel tuo wikiconfig.py: </para><screen><![CDATA[acl_rights_default = 'All:read' 
acl_rights_before  = 'WebMaster,AltroWebMaster:read,write,admin,delete' ]]></screen><para>In questo modo tutti potranno leggere, ma solo i due autori indicati potranno fare tutto. Mentre stanno lavorando a una pagina, potranno inserirvi </para><screen><![CDATA[#acl All: ]]></screen><para>cosicché nessun altro potrà vedere la pagina incompleta. Una volta terminato il lavoro, dovranno ricordarsi di rimuovere la regola ACL dimodoché vengano applicate quelle indicate da <code>acl_rights_default</code>. </para><para>Per far sì che alcune pagine consentano ai visitatori anonimi di inserire un loro commento (ad esempio la pagina <code>CommentiDeiVisitatori</code>), inserisci questa regola: </para><screen><![CDATA[#acl All:read,write ]]></screen></section><section><title>Wiki in una Intranet</title><para>Se vuoi utilizzare un wiki nella tua intranet e, fidandoti della buona fede dei tuoi collaboratori (nel senso che non compiano atti di sabotaggio tipo escludere qualcuno o <emphasis>rubare</emphasis> la proprietà delle pagine), vuoi dare loro il ruolo di amministratori, puoi usare: </para><screen><![CDATA[acl_rights_default = 'Known:admin,read,write,delete All:read,write'
acl_rights_before  = 'WikiAdmin,IlGrangeCapo:read,write,admin,delete' ]]></screen><para>Così tutti possono leggere, modificare e cambiare i diritti di accesso, <code>WikiAdmin</code> e <code>IlGrandeCapo</code> hanno assicurato il permesso di fare qualunque cosa; gli utenti registrati ottengono questo diritto da <code>acl_rights_default</code> (così facendo ottengono questo beneficio solo nel caso in cui la pagina non specifichi sue particolari ACL). </para><para>Conseguenze: </para><itemizedlist><listitem><para>su una pagina nuova, l'autore può impostare qualsiasi permesso desideri </para></listitem><listitem><para>sulle pagine esistenti, che non hanno ancora regole ACL, qualsiasi utente può impostarne i permessi di accesso </para></listitem><listitem><para>tutti quanti (eccetto <code>WikiAdmin</code> e <code>IlGrandeCapo</code>) possono venire esclusi da chiunque (registrato) sulle pagine che non hanno una loro regola. </para></listitem></itemizedlist></section><section><title>Il wiki come sito pubblico aziendale</title><para>Se vuoi utilizzare il wiki come sito aziendale e non vuoi che chiunque sia in grado di modificarne i contenuti, usa una configurazione di questo tipo: </para><screen><![CDATA[acl_rights_default = "GruppoFidati:admin,read,write,delete All:read"
acl_rights_before  = "GruppoAdmin:admin,read,write,delete +GruppoFidati:admin"]]></screen><para>Questo significa che: </para><itemizedlist><listitem><para>di default sia gli utenti riconosciuti che quelli anonimi possano solo leggere le pagine </para></listitem><listitem><para>su una nuova pagina, i membri di <code>GruppoFidati</code> possono specificare qualunque regola </para></listitem><listitem><para>sulle pagine esistenti che non abbiano una propria regola, i membri di <code>GruppoFidati</code> possono inserire qualunque controllo di accesso desiderino </para></listitem><listitem><para>tutti quanti, eccetto i membri del <code>GruppoAdmin</code> possono venire esclusi da una certa pagina, o dagli amministratori o dai collaboratori fidati </para></listitem><listitem><para>le persone nel <code>GruppoFidati</code> possono esercita i loro diritti di amministratore su qualsiasi pagina abbiano il permesso di scrittura, anche se questa specifica proprie regole di accesso </para></listitem></itemizedlist></section><section><title>Commenti su pagine a sola lettura</title><para>Puoi facilmente ottenere una sezione commentabile in una pagina a sola lettura usando una sottopagina che sia scrivibile. Ad esempio, puoi definire <code>QualchePagina</code> in questo modo: </para><screen><![CDATA[#acl QualcheUtente:read,write All:read
'''Contenuto a sola lettura'''
]]><![CDATA[
...
]]><![CDATA[
''' Commenti dei visitatori '''
[[Include(QualchePagina/Commenti)]]]]></screen><para>E in <code>QualchePagina/Commenti</code> mettere qualche cosa del tipo: </para><screen><![CDATA[#acl All:read,write
Aggiungi qui sotto le tue considerazioni su QualchePagina.]]></screen></section></section></section></article>