2009-02-18 15 views
9

Sto usando un repository Subversion ospitato su Dreamhost per un progetto.Come impedire a un utente di subversione di accedere a una parte del repository?

Vorrei consentire l'accesso ad alcuni utenti su base limitata. Per lo meno vorrei consentire l'accesso in sola lettura ad alcuni utenti, ma idealmente vorrei impedire ad alcuni utenti di vedere alcune parti del repository. Non riesco a trovare le autorizzazioni utente menzionate nei documenti Web per Subversion anche se presumo che sia lì?

Sono abituato a utilizzare Perforce, quindi quello che voglio è ciò che p4 protect fa per Perforce.

Grazie.

risposta

12

Dai un'occhiata al file authz nella directory conf /. È possibile impostare le autorizzazioni per utenti specifici e directory specifiche. In svnserve.conf è possibile specificare se gli utenti anonimi hanno accesso in lettura o meno.

Ecco un esempio da un repository di mine:

[groups] 
project1_team = dave, john, andy 

[/] 
* = 
dave = rw 

[/project1] 
@project1_team = rw 

[/project2] 
andy = r 

quello che sta succedendo qui è che ho definito un gruppo di utenti che hanno pieno accesso a Project1; dave (che capita di essere io) ha pieno accesso all'intero repository, mentre andy ha accesso in sola lettura a project2.

+0

avviso che devi impostare 'AuthzSVNAccessFile ' nel tuo dav_svn.conf se stai usando il file mod_dav_svn di apache – fishbone

0

Non ho familiarità con la specifica configurazione utilizzata da Dreamhost, ma il modo tipico di applicare le autorizzazioni è utilizzare i meccanismi di autenticazione di Apache. Ecco lo relevant page dalla documentazione di Subversion.

0

Subversion Book ha la tua risposta right here.

Seriamente, gente: quando è venuto fuori moda leggere anche la documentazione più basilare prima di infastidire altre persone?

3

Negli host Web, solitamente è presente un file di configurazione (che può essere denominato qualsiasi) per eseguire authorization. Ogni repository ha un elenco come
[my-repository: /]
myuser = rw

che darebbe 'myuser' leggere & permesso di scrittura su tutto il repository. Si potrebbe anche fare:

[/ just-questo-cartella my-repository /:]
somejerk: r

Che dovrebbe fare quello che vuoi.

0

Vedere la risposta sopra riportata. Tuttavia, per le specifiche di Dreamhost, nella directory ~/svn ci sono due file per ciascun repository repo_name.access e repo_name.passwd. Dove repo_name è il nome che hai fornito al tuo repository. È possibile modificare il file repo_name.access come descritto nella risposta accettata.

Non dimenticare di chmod 644 repo_name.access dopo averlo modificato in modo che apache possa accedervi.

2

Se si utilizza SVN e Apache insieme, seguire la seguente procedura:

essere consapevoli che il livello di autorizzazione più bella è possibile gestire sarà su una base per repository.Si supponga di avere repository1 e repository2

1- Marchio utente (s) appropriato per ogni repository in un file separato:

sudo htpasswd -c -m /etc/apache2/dav_svn_REPOSITORY1.passwd $user_name_for_repository1 
sudo htpasswd -c -m /etc/apache2/dav_svn_REPOSITORY2.passwd $user_name_for_repository2 

Se si desidera aggiungere più utenti a ciascun file, rimuovere il -c dal comando. perché è solo per creare il file per la prima volta.

2- Modificare il seguente file:

nano /etc/apache2/mods-available/dav_svn.conf 

si avrà una sezione come questa:

<Location /svn> 
    SVNPath $your svn repository path 
    AuthType Basic 
    AuthName "Subversion Repository" 
    AuthUserFile /etc/apache2/dav_svn.passwd 
    Require valid-user 
    SSLRequireSSL 
</Location> 

Copia questo blocco per ogni repository che avete, nel nostro caso è necessario un blocco di più come questo . Ora, sbarazzarsi di (eliminare) il blocco sopra e aggiungere la seguente blocco che sono copie alterati di quanto sopra uno:

<Location /svn/repository1> 
    SVNPath $your svn repository1 path 
    AuthType Basic 
    AuthName "Subversion Repository" 
    AuthUserFile /etc/apache2/dav_svn_REPOSITORY1.passwd 
    Require valid-user 
    SSLRequireSSL 
</Location> 
<Location /svn/repository2> 
    SVNPath $your svn repository2 path 
    AuthType Basic 
    AuthName "Subversion Repository" 
    AuthUserFile /etc/apache2/dav_svn_REPOSITORY2.passwd 
    Require valid-user 
    SSLRequireSSL 
</Location> 

3- Salvare il file e riavviare l'Apache.