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