it-swarm.it

Come posso impostare il controllo di accesso in SVN?

Ho creato un repository utilizzando SVN e ho caricato progetti. Esistono più utenti che lavorano su questi progetti. Ma non tutti richiedono l'accesso a tutti i progetti. Voglio impostare le autorizzazioni utente per ciascun progetto.

Come posso raggiungere questo obiettivo?

79
user15425

Nella cartella svn\repos\YourRepo\conf troverai due file, authz e passwd. Questi sono i due che devi regolare.

Nel file passwd è necessario aggiungere alcuni nomi utente e password. Presumo che tu l'abbia già fatto poiché hai persone che lo usano:

[users]
User1=password1
User2=password2

Quindi si desidera assegnare le autorizzazioni di conseguenza con il file authz:

Crea i gruppi concettuali che desideri e aggiungi persone:

[groups]
allaccess = user1
someaccess = user2

Quindi scegli quale accesso hanno sia dalle autorizzazioni che dal livello del progetto.

Quindi diamo ai nostri ragazzi "tutti gli accessi" tutti gli accessi dalla radice:

[/]
@allaccess = rw

Ma dai ai nostri "alcuni accessi" l'accesso di sola lettura ad alcuni progetti di livello inferiore:

[/someproject]
@someaccess = r

Troverai anche una semplice documentazione nei file authz e passwd.

82
Stephen Bailey

@Stephen Bailey

Per completare la risposta, è anche possibile delegare i diritti utente al project manager, tramite un semplice file di testo nel proprio repository.

Per fare ciò, si imposta il database SVN con un file authz predefinito contenente quanto segue:

###########################################################################
# The content of this file always precedes the content of the
# $REPOS/admin/acl_descriptions.txt file.
# It describes the immutable permissions on main folders.
###########################################################################
[groups]
svnadmins = xxx,yyy,....

[/]
@svnadmins = rw
* = r
[/admin]
@svnadmins = rw
@projadmins = r
* =

[/admin/acl_descriptions.txt]
@projadmins = rw

Questo file authz predefinito autorizza gli amministratori SVN a modificare un file di testo semplice visibile all'interno del repository SVN, chiamato '/ admin/acl_descriptions.txt', in cui gli amministratori SVN o i project manager modificherà e registrerà gli utenti.

Quindi imposta un hook pre-commit che rileverà se la revisione è composta da quel file (e solo da quel file).

In tal caso, lo script di questo hook convaliderà il contenuto del file di testo normale e verificherà se ciascuna riga è conforme alla sintassi SVN.

Quindi un hook post-commit aggiornerà il \conf\authz file con concatenazione di:

  • il file TEMPLATE authz presentato sopra
  • il file di testo semplice /admin/acl_descriptions.txt

La prima iterazione viene eseguita dall'amministratore SVN, che aggiunge:

[groups]
projadmins = zzzz

Commette la sua modifica e questo aggiorna il file authz.

Quindi il project manager 'zzzz' può aggiungere, rimuovere o dichiarare qualsiasi gruppo di utenti e qualsiasi utente desideri. Commette il file e il file authz viene aggiornato.

In questo modo, l'amministratore SVN non deve gestire individualmente tutti gli utenti per tutti i repository SVN.

27
VonC

Un gotcha che mi ha sorpreso:

[repos:/path/to/dir/] # this won't work

ma

[repos:/path/to/dir]  # this is right

Non è necessario includere una barra finale nella directory o vedrai 403 per la richiesta OPTIONS.

26
Chris Burgess

È possibile utilizzare svn + ssh :, e quindi si basa sul controllo di accesso al repository in una determinata posizione.

Questo è il modo in cui ospito un repository di gruppi di progetti nella mia uni, dove non riesco a configurare nient'altro. Solo avere una directory di proprietà del gruppo ed eseguire svn-admin (o qualunque cosa fosse) significa che non avevo bisogno di fare alcuna configurazione.

8

Anche se suggerirei che l'approccio Apache è migliore, SVN Serve funziona bene ed è piuttosto semplice.

Supponendo che il tuo repository si chiami "my_repo" e sia archiviato in C:\svn_repos:

  1. Crea un file chiamato "passwd" in "C:\svn_repos\my_repo\conf". Questo file dovrebbe apparire come:

    [Users]
    username = password
    john = johns_password
    steve = steves_password
    
  2. In C:\svn_repos\my_repo\conf\svnserve.conf set:

    [general]
    password-db = passwd
    auth-access=read
    auth-access=write
    

Ciò costringerà gli utenti ad accedere per leggere o scrivere in questo repository.

Seguire questi passaggi per ciascun repository, includendo solo gli utenti appropriati nel file passwd per ciascun repository.

5
RB.

Il modo migliore è configurare Apache e impostare l'accesso tramite esso. Controlla svn book per aiuto. Se non vuoi usare Apache, puoi anche fare un controllo minimalista dell'accesso usando svnserve.

3