web-dev-qa-db-fra.com

Comment configurer le contrôle d'accès dans SVN?

J'ai mis en place un référentiel à l'aide de SVN et de projets téléchargés. Plusieurs utilisateurs travaillent sur ces projets. Mais tout le monde n'a pas besoin d'accéder à tous les projets. Je souhaite configurer les autorisations utilisateur pour chaque projet.

Comment puis-je atteindre cet objectif?

79
user15425

Dans votre dossier svn\repos\YourRepo\conf, vous trouverez deux fichiers, authz et passwd. Ce sont les deux que vous devez ajuster.

Dans le fichier passwd, vous devez ajouter des noms d'utilisateur et mots de passe. Je suppose que vous avez déjà fait cela depuis que des personnes l'utilisent:

[users]
User1=password1
User2=password2

Ensuite, vous souhaitez attribuer des autorisations en conséquence avec le fichier authz:

Créez les groupes conceptuels que vous souhaitez et ajoutez-y des personnes:

[groups]
allaccess = user1
someaccess = user2

Choisissez ensuite quel accès ils ont à la fois au niveau des autorisations et du projet.

Donnons donc à tous nos gars "tout accès" tous les accès depuis la racine:

[/]
@allaccess = rw

Mais n'accordez à nos gars "certains accès" qu'un accès en lecture seule à un projet de niveau inférieur:

[/someproject]
@someaccess = r

Vous trouverez également de la documentation simple dans les fichiers authz et passwd.

82
Stephen Bailey

@Stephen Bailey

Pour compléter votre réponse, vous pouvez également déléguer les droits d’utilisateur au responsable de projet, via un fichier texte brut de votre référentiel.

Pour ce faire, vous configurez votre base de données SVN avec un fichier par défaut authz contenant les éléments suivants:

###########################################################################
# 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

Ce fichier authz par défaut autorise les administrateurs SVN à modifier un fichier texte brut visible dans votre référentiel SVN, appelé '/ admin/acl_descriptions.txt', dans lequel les administrateurs ou les chefs de projet SVN modifiera et enregistrera les utilisateurs.

Ensuite, vous configurez un hook de pré-validation qui détectera si la révision est composée de ce fichier (et uniquement de ce fichier).

Si tel est le cas, le script de ce hook validera le contenu de votre fichier texte et vérifiera si chaque ligne est conforme à la syntaxe SVN.

Ensuite, un hook post-commit mettra à jour le \conf\authz fichier avec la concaténation de:

  • le fichier TEMPLATE authz présenté ci-dessus
  • le fichier texte brut /admin/acl_descriptions.txt

La première itération est effectuée par l'administrateur SVN, qui ajoute:

[groups]
projadmins = zzzz

Il valide sa modification et met à jour le fichier authz.

Ensuite, le chef de projet 'zzzz' peut ajouter, supprimer ou déclarer tout groupe d'utilisateurs et tous les utilisateurs de son choix. Il valide le fichier et le fichier authz est mis à jour.

De cette manière, l'administrateur SVN n'a pas à gérer individuellement tous les utilisateurs pour tous les référentiels SVN.

27
VonC

Un truc qui m'a attrapé:

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

mais

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

Vous ne devez pas inclure de barre oblique finale dans le répertoire, sinon vous verrez 403 pour la demande OPTIONS.

26
Chris Burgess

Vous pouvez utiliser svn + ssh:, puis c'est basé sur le contrôle d'accès au référentiel à l'emplacement donné.

C’est ainsi que j’héberge un référentiel de groupe de projets à l’université, où je ne peux rien configurer d’autre. Le fait de posséder un répertoire appartenant au groupe et d'exécuter svn-admin (ou quoi que ce soit d'autre) signifie que je n'ai besoin d'aucune configuration.

8
Matthew Schinckel

Bien que je suggère que l’approche Apache soit meilleure, SVN Serve fonctionne bien et est assez simple.

En supposant que votre référentiel s'appelle "my_repo" et qu'il soit stocké dans C:\svn_repos:

  1. Créez un fichier appelé "passwd" dans "C:\svn_repos\my_repo\conf". Ce fichier devrait ressembler à:

    [Users]
    username = password
    john = johns_password
    steve = steves_password
    
  2. Dans C:\svn_repos\my_repo\conf\svnserve.conf, définissez:

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

Cela obligera les utilisateurs à se connecter pour lire ou écrire dans ce référentiel.

Suivez ces étapes pour chaque référentiel, en n'incluant que les utilisateurs appropriés dans le fichier passwd de chaque référentiel.

5
RB.

Le meilleur moyen est de configurer Apache et de définir l’accès par ce biais. Consultez le svn book pour obtenir de l'aide. Si vous ne souhaitez pas utiliser Apache, vous pouvez également effectuer un contrôle d'accès minimaliste à l'aide de svnserve.

3
Mladen Mihajlovic