選擇自 digitking 的 Blog 

 在使用Subversion時(shí),認(rèn)證文件AuthzSVNAccessFile能控制每一個(gè)目錄的權(quán)限,但講解的文檔較少,中文文檔更少。下面通過實(shí)例講解使用方法。

環(huán)境Windows 2003 Server,局域網(wǎng),域:domain.com.cn
Apache 2.0.52
Subversion 1.1.0
TortoiseSVN 1.1.0
LanguagePack_1.1.0_zh_CN

例子:
Repository存放在D:\repository下,有兩個(gè)repository: test and xtest
每個(gè)repostory 的結(jié)構(gòu)相同:
  根:01.txt
      02.txt
  folder 1-: 11.txt
  12.txt
  folder 2-: 21.txt
    22.txt
對(duì)目錄1和2作不同的讀寫權(quán)限控制
Basic Authentication

修改文件:
Httpd.conf:
#Basic authentication
<Location /repository>
  DAV svn
  SVNParentPath d:/repository
  AuthzSVNAccessFile d:/repository/accessfile                
  Require valid-user
  AuthType Basic
  AuthName "身份驗(yàn)證"
  AuthUserFile d:/repository/passwd                 
</Location>

用Apache的htpasswd生成用戶名和密碼,
Htpasswd –c passwd username
第二次不用 –c。
生成的用戶名和密碼在passwd中:
0:$apr1$Vu5.....$XZ/csz/2YKoPNKpb88O5p0
1:$apr1$vu5.....$I1VwMJ7JtRmpmJjVUlT4h1
2:$apr1$Dv5.....$vf2MTg/p0mY.WcFhx7wET1
3:$apr1$Tv5.....$gfk4AiP49h0JjKN8BuJdB.

AuthzSVNAccessFile控制每個(gè)目錄的讀寫權(quán)限
[test:/]
1 = r
2 = r
3 = r
[test:/1]
1 = rw
[test:/2]
2 = rw

在客戶端,用http://server/repository/test可以訪問。也可以直接進(jìn)入子目錄訪問:http://server/repository/test/1,http://server/repository/test/2。系統(tǒng)會(huì)要求進(jìn)行認(rèn)證。例如用戶1對(duì)目錄1有讀寫權(quán)限,可以commit修改,但對(duì)目錄2所作的修改就不能commit。


SSPI認(rèn)證。
按上一種方式,用戶更換一次密碼,就必須修改一次密碼文件。用SSPI認(rèn)證則可以沒有這個(gè)問題。
Httpd.conf文件:
#SSPI authentication
<Location /repository>
  DAV svn
  SVNParentPath d:/repository
  AuthzSVNAccessFile d:/repository/accessfilesspi               
  Require valid-user
  AuthType SSPI
  AuthName "Subversion repositories"
  # SSPI settings
  SSPIAuth On
  SSPIAuthoritative On
  # point to domaincontroller
  SSPIDomain domain.com.cn
  SSPIOfferBasic On
</Location>

控制文件AuthzSVNAccessFile要作相應(yīng)的修改:
[test:/]
domain\user1 = r
domain\administrator = r
[test:/1]
domain\user1 = rw
[test:/2]
domain\user1 =
domain\administrator = rw
在tortoiseSVN使用時(shí),會(huì)提示認(rèn)證,填寫用戶名和密碼即可。