2013年11月4日 星期一

Subversion 設定 Repository 的 Access Control

之前有寫關於 Subversion 基本的設定, 按照前一篇的設定, 有帳號就可以存取所有的
Repository, 這對真實的環境使用上是有問題的, 因為大部分的情況是, 不同專案使用的
repository 有不同專案成員, 所以會有不同權限, 開發人員可以存取整個或部分專案內容, QA/QC
人員只能讀取專案內容, 不能寫入; 這篇就是要跟大家介紹 Subversion 的 Access Control。
在 Subversion 中要使用 Access Control 必須啟動 Apache 裡的模組 authz_svn, 指令如下:
sudo a2enmod authz_svn


修改 /etc/apache2/mods-available/dav_svn.conf
<Location /MyWebSite>
    DAV svn
    SVNPath /var/www/svn/MyWebSite
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile /etc/subversion/passwd
    AuthzSVNAccessFile /etc/subversion/access_control.conf
    Require valid-user
</Location>


新增 AuthzSVNAccessFile /etc/subversion/access_control.conf 
檔案的目錄與名稱可自行更改, 不一定要是 /etc/subversion/access_control.conf

接著要重新啟動 Apache, 才可以使用, 指令如下:
sudo /etc/init.d/apache2 restart  或
sudo service apache2 restart

設定 Repository 的 Access Control, Subversion 的設定很直覺

[MyWebSite:/]
tom = rw
john = r
在 MyWebSite 的這個 Repository 從根(/) 以下, tom 有讀寫的權限, john 只有讀的權限。

[MyWebSite:/chunk/doc]
mary = rw
* = r
在 MyWebSite 的這個 Repository /chunk/doc 以下的目錄 mary 有讀寫的權限, 所有的人
都有讀的權限。

每個專案都要一個一個人加他的權限, 是很沒效率的方法, Subversion 可以用 groups 的方法,
可以比較有效設定。
要在檔案開頭的部分加入groups 的設定:
[groups]
QA = rita, richard
Team_A  = tom, steve, kevin

[MyWebSite:/]
@QA = r
@Team_A = rw
john = r

QA 與 Team_A 都是群組, 接在後面的是成員, 在使用群組名稱時前面要加 @, 例如 @QA。
所有的使用者都必須是由 htpasswd 建立的。

注意: 修改 /etc/apache2/mods-available/dav_svn.conf 後必須重啟 Apache,  方可生效,
但修改 Access Control檔(本例為: /etc/subversion/access_control.conf) 無需重啟即可生效。

沒有留言:

張貼留言