2008-09-17 8 views
77

Ich habe ein Repository mit SVN eingerichtet und Projekte hochgeladen. An diesen Projekten arbeiten mehrere Benutzer. Aber nicht jeder arbeitet an allen Projekten und benötigt Zugriff. Ich möchte Berechtigungen für jedes der Projekte mit Benutzern einrichten.So richten Sie die Zugriffskontrolle in SVN ein?

Wie erreiche ich das?

Antwort

3

Der beste Weg ist, Apache einzurichten und den Zugriff darauf zu setzen. Überprüfen Sie die svn book für Hilfe. Wenn Sie Apache nicht verwenden möchten, können Sie mit svnserve auch eine minimalistische Zugriffssteuerung durchführen.

82

In Ihrem svn \ repos \ YourRepo \ conf Ordner finden Sie zwei Dateien finden, authz und passwd. Dies sind die zwei, die Sie anpassen müssen. In der passwd Datei müssen Sie einige Benutzernamen und Passwörter hinzufügen. Ich nehme an, Sie dies bereits getan haben, seit Sie Leute, die es haben:

[users] 
User1=password1 
User2=password2 

Dann möchten Sie Berechtigungen entsprechend mit dem authz Datei zuweisen:

Erstellen Sie die konzeptionellen Gruppen, die Sie möchten, und fügen Sie Menschen es:

[groups] 
allaccess = user1 
someaccess = user2 

Dann entscheiden, welcher Zugang haben sie sowohl von den Berechtigungen und Projektebene.

So gibt sie unseren "all access" Jungen alle Zugriffe von der Wurzel:

[/] 
@allaccess = rw 

Aber nur geben unseren "einiger Zugang" Jungen nur lesenden Zugriff auf ein niedrigeres Level-Projekt:

[/someproject] 
@someaccess = r 

Sie finden auch einige einfache Dokumentation in den authz und passwd Dateien.

+7

relevante Handbuchseite ist: http://svnbook.red-bean.com/en/1.7/svn.serverconfig.pathbasedauthz.html – ErichBSchulz

+0

Hinweis: es funktioniert nicht, wenn Sie Repository direkt über SSH zugreifen (ohne svnserve) –

+0

Wenn ich zum Beispiel einen Ordner unter einem Repository zu Benutzer geben, kann der Benutzer nur auf diesen Ordner mit direkter Verknüpfung zugreifen. Ist es dem Benutzer möglich, ein Repository hinzuzufügen, und ihm werden nur die ihm zugewiesenen Ordner angezeigt? Danke für die Antwort . – maoanz

4

Obwohl ich vorschlagen würde, der Apache Ansatz ist besser, SVN Serve funktioniert gut und ist ziemlich einfach.

Vorausgesetzt, dass Ihr Repository wird als "my_repo", und es wird in C: \ svn_repos:

  1. Erstellen Sie eine Datei "passwd" in dem Namen "C: \ svn_repos \ my_repo \ conf". Diese Datei sollte wie folgt aussehen:

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

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

Dies wird Benutzer zwingen, anmelden, um diese zu lesen oder schreiben Repository.

Befolgen Sie diese Schritte für jedes Repository, wobei nur die entsprechenden Benutzer in die Datei passwd für jedes Repository einbezogen werden.

+0

Achtung: Passwörter werden in der SVN-Konf-Datei im Klartext gespeichert! – AVA

6

Sie können svn + ssh: verwenden und basieren dann auf der Zugriffssteuerung auf das Repository am angegebenen Speicherort.

So hostet ich ein Projektgruppen-Repository an meiner Uni, wo ich nichts anderes einrichten kann. Wenn ich nur ein Verzeichnis besitze, das der Gruppe gehört, und svn-admin (oder was auch immer es war) dort ausführen, bedeutet das, dass ich keine Konfiguration vornehmen musste.

+0

Das ist eine erschreckende Antwort. Diese ssh-Methode ist schlecht dokumentiert und scheint nur für Linux zu funktionieren. – user1040323

+0

Einfach nicht wahr. Man muss nur einen SSH-Daemon auf ihrem Windows-Server laufen lassen und svn + ssh funktioniert für Windows genauso wie für Linux. Es gibt viele Anleitungen, die erklären, wie man SSH auf einem Windows-Rechner ausführt. –

+0

Auch, lieber @ user1040323, gibt es andere Nicht-Linux-Plattformen außer Windows: ziemlich sicher, die Maschine, die ich war auf _wasnot_ Linux, aber einige BSD-Variante. –

26

@Stephen Bailey

Ihre Antwort zu vervollständigen, können Sie auch die Nutzungsrechte an den Projektmanager delegieren, durch eine einfache Textdatei in Ihrem Repository.

Um dies zu tun, richten Sie Ihre SVN-Datenbank mit einer Standard-authz-Datei, die Folgendes enthält.

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

Dieser Standard authz Datei ermöglicht die SVN-Administratoren eine einfache Textdatei sichtbar in Ihrer SVN-Repository zu ändern, genannt ‚/admin/acl_descriptions.txt‘, in dem die SVN-Administratoren oder Projektmanager ändern und Registrieren Sie die Benutzer.

Dann richten Sie einen Pre-Commit-Hook ein, der erkennt, ob die Revision aus dieser Datei besteht (und nur diese Datei).

Wenn dies der Fall ist, validieren diese Hook-Skripts den Inhalt Ihrer Nur-Text-Datei und prüfen, ob jede Zeile mit der richtigen SVN-Syntax übereinstimmt.

Dann wird ein post-commit hook die \conf\authz Datei mit der Verkettungs von Update: above

  • Die Schablone authz Datei präsentiert
  • die Klartextdatei /admin/acl_descriptions.txt

der erste Iteration erfolgt durch den SVN-Administrator, er fügt hinzu:

[groups] 
projadmins = zzzz 

Er schreibt seine Änderung, und das aktualisiert die Datei authz.

Dann kann der Projektmanager 'zzzz' eine Gruppe von Benutzern und beliebigen Benutzern hinzufügen, entfernen oder deklarieren. Er legt die Datei fest und die Datei authz wird aktualisiert.

Auf diese Weise muss der SVN-Administrator nicht allen Benutzern für alle SVN-Repositories folgen.

25

Ein Gotcha, die mich gefangen:

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

aber

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

Sie müssen keinen Schrägstrich auf dem Verzeichnis enthalten, oder Sie werden 403 für die OPTIONS-Anforderung sehen.

+0

WTF, ich habe nicht danach gesucht, aber es war genau die Antwort für mein Problem = D – Fox32