E’ possibile rendere più fine il controllo degli accessi sui repository di SVN che utilizzano Apache 2 rispetto alle impostazioni standard che prevedono che un utente possa semplicemente accedere in lettura e scrittura ad uno specifico repository nella sua globalità.
Ad esempio, potrebbe essere possibile, in caso di necessità, voler consentire ad un dato utente l’accesso in lettura ad un repository e l’accesso in lettura e scrittura su di un altro repository. Ancora, potrebbe essere richiesto, relativamente ad uno stesso repository di abilitare la lettura o la scrittura su specifiche sottodirectory.
Per ottenere questa maggiore granularità di controllo con SVN è possibile modificare la configurazione del file di Apache rimuovendo, se presente, la riga:
AuthGroupFile /etc/apache2/groups
che gestisce i gruppi “classici” ed aggiungere la direttiva:
Require valid-user
che richiederà la validazione per tutti gli utenti che tenteranno di accedere al repository. Ovviamente /etc/apache2/groups è un file specifico di un esempio specifico e potrebbe avere un nome differente in base a scelte personali.
A questo punto è possibile aggiungere una riga come la seguente:
AuthzSVNAccessFile /etc/apache2/svnaccessfile
che indica il file sul quale verranno impostati i permessi di accesso.
In definitiva avremo qualcosa del tipo:
<Location /miorepo>
DAV svn
SVNListParentPath on
SVNPath /percorso/miorepo
AuthType Basic
AuthName “SVN repository”
AuthUserFile /etc/apache2/users
Require valid-user
AuthzSVNAccessFile /etc/apache2/svnaccessfile
</Location>
Il file in questione, /etc/apache2/svnaccessfile, è un file di testo come il seguente:
[groups]
readers = michele
devs = carlo, marco, luigi, simone, daniele
[miorepo:/]
@readers = r
@devs = rw
#abilitazione-disabilitazione selettiva sottodirectory
[miorepo:/trunk/ProgettoX/cartellaY/cartellaZ]
carlo = rw
La direttiva [groups] indica, così come ci aspetteremmo, i gruppi di utenti. Tali utenti sono ovviamente quelli inseriti con la normale procedura nel file /etc/apache2/users
Le successive direttive, banalmente individuabili grazie al fatto di essere identificate da parentesi quadre specificano qualcosa del tipo:
[repository:percorso]
dove “repository” è ovviamente il nome del repository che si intende gestire e percorso è la cartella del repository stesso. Ad esempio:
[miorepo:/]
indica nella sua totalità il repository “miorepo”.
I permessi specifici andranno inseriti nelle righe di seguito come ad esempio:
[miorepo:/]
@readers = r
@devs = rw
Si intuisce che ogni riga di abilitazione è formata da due sezioni separate dal simbolo “=”. Nel caso specifico ho inserito i nomi dei gruppi definiti nella sezione apposita. Si intuisce anche che per indicare i gruppi si antepone al nome del gruppo il simbolo della chiocciolina.
I simboli “r” e “rw” stanno ovviamente, rispettivamente, per sola lettura e lettura scrittura. Oltre ai nomi dei gruppi è possibile indicare i nomi dei singoli utenti, così come il carattere jolly * ad indicare tutti gli utenti.
Come detto è possibile settare i permessi di lettura/scrittura anche su di una specifica sottodirectory come segue:
[miorepo:/trunk/ProgettoX/cartellaY/cartellaZ]
carlo = rw
dove /trunk/ProgettoX/cartellaY/cartellaZ è il percorso nel repository che si vuole gestire in maniera differente rispetto alle restanti sezioni.
Per chiudere segnalo il seguente link di sicuro interesse:
http://svnbook.red-bean.com/en/1.1/ch06s04.html
Carlo A. Mazzone