Authentication in Svn

Trong các bài trước, tôi đã hướng dẫn các bạn cài đặt, cấu hình đơn giản, tạo repository, sử dụng một số lệnh cơ bản của giao thức SVN để thao tác với Repository.

Vấn đề đặt ra là trong trường hợp dự án có nhiều thành viên tham gia, có nhiều team cùng tham gia dự án và role của mỗi team hoặc mỗi thành viên là khác nhau trên từng dự án, thậm chí trên từng thư mục con của dự án.

Vậy làm sao để phân quyền truy cập cho các thành viên, các team đó trong SVN.

Với VisualSVN, mọi việc rất dễ dàng, tuy nhiên trong bài này tôi không có ý định hướng dẫn các bạn tạo user và cấu hình xác thực trong VisualSVN. Trong phạm vi bài này, tôi sẽ giới thiệu với các bạn cách cấu hình Authentication cho các user, các team truy cập vào Repository và các dự án bằng text file.

Để thực hiện việc phân quyền trong SVN, các bạn sử dụng file authz trong thư mục conf của repository. Để chỉ định việc kiểm tra quyền được cấu hình trong file authz, bạn phải mở chỉ thị trong authz-db trong file svnserve.conf ra. Khi đó, bạn có được file svnserve.conf như sau:

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

Để bất đầu hãy mở file authz bằng notepad và xóa trắng nó đi.

Phân nhóm user

Trong svn, việc phân nhóm user trong file authz được thực hiện trong 1 session, dòng đầu tiên của session này là [groups]. Các dòng tiếp theo của session này là định nghĩa các nhóm tham gia vào dự án (sẽ được phân quyền để truy cập vào repository). Cấu trúc của 1 dòng như sau:

    group_name = user_name1, user_name2

Các user name ngăn cách nhau bởi dấu phẩy (,) và hãy chắc chắn rằng các user này đã được tạo trong file passwd.

Ví dụ, bạn tạo ra 2 nhóm tham gia dự án, khi đó session groups sẽ như sau:

    [groups]
    dev_team = dev1, dev2, dev3
    test_team = test1, test2

Phân quyền cho user hoặc nhóm user

Trước khi phân quyền, bạn cần biết: Trong SVN, quyền truy cập vào 1 thư mục nào đó có 2 mức: read (r)write(w). Việc phân quyền cho user được access vào thư mục ở quyền nào được gán bởi các ký tự đại diện r hoặc w.

Để gán quyền cho các user hoặc group access vào một thư mục nào đó trong repository, bạn hãy tạo ra 1 session với tên session là đường dẫn tới thư mục cần phân quyền [đường dẫn] (trong trường hợp phân quyền truy cập cho repository (thư mục gốc) thì tên session sẽ để trống [/]). Trong 1 file authz có thể có nhiều session phân quyền khác nhau.

Ngay phía dưới tên, các dòng tiếp theo trong session sẽ thể hiện quyền của user hay nhóm.

Ví dụ, tôi phân quyền cho user admin toàn quyền trên toàn repository này thì sử dụng thì sử dụng session [/] như sau:

[/]
admin = rw

Phân quyền cho user1 có toàn quyền trên dự án AP thì như sau:

[/ap]
user1=rw

Phân quyền cho nhóm dev đã tạo ở trên toàn quyền trên thư mục src của dự án AP và nhóm test chỉ có quyền read trên thư mục src này. (chú ý đặt đấu @ trước tên nhóm)

[/ap/src]
@dev=rw
@test=r

Phân quyền cho tất cả mọi người đều được truy cập vào thư mục docs của dự án AP.

[/ap/docs]
*=rw

Kết quả, file authz sẽ như sau:

[groups]
dev=dev1,dev2,dev3
test=test1,test2

[/]
admin=rw

[/ap]
user1=rw

[/ap/src]
@dev=rw
@test=r

[/ap/docs]
*=rw

Bạn hãy thử sử dụng lệnh ls để kiểm tra hiệu lực của quyền read, lệnh mkdir để kiểm tra hiệu lực của lệnh write xem sao nhé. Cách sử dụng cách lệnh thì đã được giới thiệu trong các bài trước rồi.