Subversion的权限设置功能为代码的安全访问提供了可靠的保障,通过设置不同的用户权限和组权限,各种角色分工明确,在共享代码的同时保证代码不受破坏。
在建立多个版本库时,每个版本库都有自己的配置文件,可以单独配置用户权限和组权限。为简单起见,将所有版本库都指向同一个配置文件,在这个配置文件中统一进行配置。
1.指定根目录
首先要指定一个根目录,假设为C:\VersionLib,所有的版本库都存在这个根目录之下。然后启动svnserve服务,具体步骤见我的上一篇文章《Subversion安装配置指南》,需要注意的是启动目录为C:\VersionLib,即指向根目录,不指向任何特定的版本库。
2.建立版本库
在C:\VersionLib中建立子目录,如prj1、prj2,子目录里还可以建立子目录,如在prj2中建立shanghai、xian,目录结构如下:
VersionLib
-prj1
-prj2
-shanghai
-xian
然后在prj1、shanghai、xian中分别建立三个版本库,并把passwd、authz文件复制一份到VersionLib目录中,以便统一配置
3.配置版本库
(1)修改3个版本库的svnserve.conf文件
把授权权限打开:
anon-access = none
auth-access = write
在prj1版本库中修改svnserve.conf:(指向根目录)
password-db = ..\..\passwd
authz-db = ..\..\authz
在其他两个版本库中修改svnserve.conf:(指向根目录)
password-db = ..\..\..\passwd
authz-db = ..\..\..\authz
(2)修改根目录中的passwd文件
在passwd文件中创建用户和密码:
[users]
qianxin = qx
yiyu = yy
gongyu = gy
zhaoming = zm
dai = dai
yinjun = yj
wangying = wy
一共创建了7个用户
(3)修改根目录中的authz文件
在authz中设置权限:
[groups] #分组
prj1_group = dai,gongyu,wangying
prj2_sh_group = zhaoming,yinjun
prj2_xa_group = qianxin,yiyu
[/] #根目录,即所有的版本库(包括prj1、prj2)
qianxin = rw #管理员
[prj1:/] #prj1项目
qianxin = rw #由于指定了"* = r",覆盖了父目录权限的继承,因此需要另外指定管理员对该版本库的访问权限
@prj1_group = rw #组权限,前面必须加@
* = r #除了prj1_group组以外所有人的权限
[prj2/shanghai:/] #prj2中的shanghai项目
qianxin = rw #同上
@prj2_sh_group = rw
* = #除了prj2_sh_group组以外所有人都无法访问该版本库
[prj2/xian:/] #prj2中的xian项目
prj2_xa_group = rw
注意点:
子目录继承父目录的访问权限,如果指定了管理员对根目录具有读写权限,则管理员对子目录也具有读写权限。
但是,如果在子目录中设置* = 来割断对父目录权限的继承,则子目录中必须设置管理员权限为rw,下面这种设置是有问题的:
[arm:/]
qianxin = rw
[arm:/diary/shanghai]
dai = rw
gongyu = rw
* =
由于管理员qianxin对/diary/shanghai没有任何权限,因此就无法进行导入(导入要求对所有目录都有写的权限)。正确的做法是在子目录的权限配置中也加上“qianxin = rw”。
4.访问版本库
通过以下URL访问各版本库(导入、导出):
svn://localhost/prj1
svn://localhost/prj2/shanghai
svn://localhost/prj2/xian