1.5 使用SVN协议来操作仓库
前面的章节都是使用http协议来操作SVN仓库,主要的内容就是限制匿名与非匿名用户是否拥有读或写权限,其实SVN中还支持自己独有的svn://协议来访问SVN仓库。
1.5.1 默认情况下匿名用户可读不可写
Step01:在继续新章节知识点之前,要先将SVN安装路径中的C:\Program Files\CollabNet\Subversion Server\httpd\conf\httpd.conf文件内容初始化如下的代码:
<Location /svn>
DAV svn
SVNParentPath C:\svn_repository
</Location>
作用就是重置实验环境。
Step02:在C:\svn_repository路径中创建名称为test1的仓库。
Step03:重启svn和Apache的Service服务。
Step04:输入路径svn://localhost/test1来访问test1仓库,如图1.58所示。
图1.58 使用svn协议可以匿名读仓库
Step05:当对仓库test1执行Import导入的操作时出现异常如图1.59所示。
图1.59 匿名不可写
1.5.2 设置匿名用户可读可写
如果想使用svn://协议进行匿名写怎么办呢?
Step01:将C:\svn_repository\test1\conf\svnserve.conf文件的内容编辑如下:
[general]
anon-access = write
Step02:重启SVN及Apache服务。
Step03:将任意文件导入到svn://localhost/test1路径中,出现成功提示如图1.60所示。
图1.60 匿名写成功
导入Import成功,说明如果使用svn://协议对仓库进行操作的权限配置是要在C:\svn_repository\test1\conf\svnserve.conf文件中进行定义的。
实验进行到这,已经实现下面2种情况:
- 在默认的情况下(不修改svnserve.conf文件),匿名可读不可写
- 在修改svnserve.conf文件后使匿名用户具有可读/写权限
下一步要实现:
- 屏蔽匿名读,在屏蔽匿名读的情况下自然也不可写了
1.5.3 设置匿名用户不可读不可写
那如果使用svn://协议不允许匿名读呢?也就是不允许未登陆时查看仓库中的内容。
Step01:将C:\svn_repository\test1\conf\svnserve.conf文件的内容编辑如下:
[general]
anon-access = none
把原来的#号和空格要去掉,属性anon-access的值还要改成none。
Step02:重启svn和Apache的Service服务。
Step03:再执行svn://localhost/test1网址时出现异常如图1.61所示。
图1.61 使用svn协议屏蔽匿名读操作
在上面的界面中输入正确的基于svn://协议的仓库地址后并没有显示出仓库中的内容,并且登陆界面也没有出现,彻彻底底的切断了匿名访问仓库的权限,也就是仓库在系统中存在,用任何的办法也访问不了,所以就要添加账号,但此账号是用在基于SVN协议的访问仓库,实现验证用户的读写权限。
1.5.4 设置验证用户可读可写
Step01:继续更改C:\svn_repository\test1\conf\svnserve.conf文件中的代码,更改后的代码如下:
[general]
anon-access = none
# auth-access = write
password-db = passwd
配置anon-access = none的作用是匿名不可读不可写,配置password-db = passwd代表使用passwd文件中的用户信息进行登陆。
Step02:继续更改C:\svn_repository\test1\conf\passwd文件中的内容如下:
[users]
ghy=123
Step03:重新启动SVN和Apache服务。
Step04:再执行svn://localhost/test1网址时出现登陆界面如图1.62所示。
图1.62 出现登陆界面
Step05:输入正确的用户名ghy和密码123后单击OK按钮成功看到test1仓库中的内容如图1.63所示。
图1.63 验证登陆成功
Step06:这时如果用ghy账号往test1仓库中Import数据是成功的,如图1.64所示。
图1.64 成功导入
成功Import导入的结果说明使用如下的配置代码:
[general]
anon-access = none
# auth-access = write
password-db = passwd
当验证用户登陆成功后默认情况下是可以执行Import导入操作的。
那如果想屏蔽登陆用户的Import导入/写权限呢?
1.5.5 设置验证用户可读不可写
Step01:继续更改C:\svn_repository\test1\conf\svnserve.conf文件中的代码如下:
[general]
anon-access = none
auth-access = read
password-db = passwd
代码auth-access = read的含义是登陆账号只有读无写的权限。
Step02:重新启动SVN和Apache服务。
Step03:再次对test1仓库进行Import操作后的效果如图1.65所示。
图1.65 登陆用户只有读无写的权限
在这里需要说明的是,账号验证用户ghy只在使用svn://协议时有效,如果使用http协议访问test1仓库时是直接打开仓库,并不出现登陆界面,从此现象来看使用svn协议使用的是SVN服务,Http协议使用的是Apache服务,svn://协议使用的是C:\svn_repository\test1\conf\svnserve.conf文件中的代码来进行匿名与非匿名用户权限的配置,而基于http://协议访问仓库的权限是根据C:\Program Files\CollabNet\Subversion Server\httpd\conf\httpd.conf文件中的配置来定义的,由于它们使用的服务不一样,所以svn://和http://协议它们各有自己的验证方式。
1.5.6 设置匿名用户可读不可写登陆用户可写可读的权限
当使用svn://协议操作开源项目时,大多数都要设置匿名用户可读不可写,而登陆用户可写可读的权限。
Step01:更改C:\svn_repository\test1\conf\svnserve.conf文件中的代码如下:
[general]
anon-access = read
auth-access = write
password-db = passwd
Step02:重新启动SVN和Apache服务。
Step03:再执行svn://localhost/test1网址时出现界面如图1.66所示。
图1.66 匿名可读
Step04:当对test1执行Import操作时弹出登陆界面,如图1.67所示。
图1.67 登陆用户可写
Step05:成功Import的界面如图1.68所示。
图1.68 登陆用户成功Import导入文件
1.6 使用SVN协议操作仓库的权限配置
通过前面章节中的演示可以发现,在仓库test中conf\passwd文件里新添加1个用户时,在默认的情况下只要这个用户成功登陆,则这个用户拥有操作仓库全部的权限,在真实的环境中还是需要对用户进行权限的细化配置。
在权限分配时,应遵守从根目录到子目录,从设置最广泛权限到最精细权限,从只读权限到读写权限设置原则,即从根目录开始设置最广泛的访问权限,然后逐步设置下属子目录的访问权限,在SVN中目录的访问权限可以分配给组,也可以分配给指定的用户。
更改C:\svn_repository\test1\conf\passwd文件中的代码如下:
[users]
gaohongyan1=123
gaohongyan2=123
gaohongyan3=123
gaohongyan4=123
上面的代码创建了4个用户。
更改C:\svn_repository\test1\conf\svnserve.conf文件中的代码如下:
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
为了正确的测试登陆用户的权限,所以将匿名用户设置为无任何的权限。上面的代码有2处与权限有关的配置:
auth-access = write
authz-db = authz
代码authz-db的作用是使用authz文件做为权限的细化分配的定义。
1.6.1 设置gaohongyan2用户拥有只读权限
Step01:在默认的情况下authz文件中的内容如下:
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
# [/foo/bar]
# harry = rw
# &joe = r
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
Step02:更改上面的权限配置代码如下:
[aliases]
ghy1=gaohongyan1
ghy2=gaohongyan2
ghy3=gaohongyan3
ghy4=gaohongyan4
[/]
&ghy2=r
[aliases]的作用是将字母比较多的用户名起别名,为了减少配置的代码量。引用别名ghy2前面要加&符号。
[/]的作用是设置整个仓库对gaohongyan2用户只拥有读的权限。
Step03:重新启动SVN及Apache服务。
Step04:输入svn://localhost/test1网址后用账号gaohongyan2及密码123登陆后可以看到仓库中的内容,但将数据Import导入到仓库test1时出现异常,如图1.69所示。
图1.69 用户gaohongyan2无写权限
Step05:如果想让gaohongyan2用户拥有写权限则可以配置代码:
[aliases]
ghy1=gaohongyan1
ghy2=gaohongyan2
ghy3=gaohongyan3
ghy4=gaohongyan4
[/]
&ghy2=rw
Step06:重启服务后执行Import操作是成功的。
本实验结束后,可以总结代码:
auth-access = write
authz-db = authz
当代码authz-db = authz被启用,也就是不再被注释时,配置代码auth-access = write的作用被忽略。
1.6.2 不使用别名aliases和未对用户分配权限的示例
前面的章节使用别名[aliases]来减化用户名的字母长度,本章节将实验不使用别名的情况下是否能正确操作仓库。
Step01:更改authz文件的代码如下:
[aliases]
ghy1=gaohongyan1
ghy2=gaohongyan2
ghy3=gaohongyan3
ghy4=gaohongyan4
[/]
&ghy2=rw
gaohongyan3=rw
上面代码中对[/]每个仓库根路径与用户进行权限关联,从代码中可以发现,并未出现对gaohongyan1做任何的权限分配,这时来看看gaohongyan1拥有哪些权限。
Step02:重启SVN及Apache服务。
Step03:输入网址svn://localhost/test1后弹出登陆界面,输入gaohongyan1及密码123后的界面效果如图1.70所示。
图1.70 账号gaohongyan1无任何的权限
上面的示例可以总结出如果从未对路径与用户进行绑定,则gaohongyan1用户无任何的权限,即使在passwd文件中配置gaohongyan1账号也无济于事。
那么,当直接使用gaohongyan3账号,不使用别名配置时是可以对仓库test1拥有完全的读写权限的,也就是在authz文件中可以使用别名的功能,也可以不使用别名的功能。
1.6.3 对用户进行分组groups
对用户进行分组可以方便的对相同权限的用户进行管理,在这里建议大家组名和用户名的名称尽量不要一致,这样容易产生混淆。
Step01:更改authz文件的代码如下:
[aliases]
ghy1=gaohongyan1
ghy2=gaohongyan2
ghy3=gaohongyan3
ghy4=gaohongyan4
[groups]
group1=&ghy1,&ghy2
group2=&ghy1,gaohongyan3
group3=gaohongyan3,gaohongyan4
[/]
@group1=r
@group2=rw
@group3=rw
通过使用@符号来引用组名。
上面代码的作用是配置了3个组,组group1对仓库拥有读权限,而组group2和group3对仓库拥有读写权限。
Step02:重启SVN及Apache服务。
Step03:可以在计算机中使用group3的gaohongyan3和gaohongyan4用户进行测试,得出的结论是这2个账户对test1仓库拥有完全的读写操作。
Step04:继续在计算机中使用group2的&ghy1和gaohongyan3用户进行测试,得出的结论是这2个账户对test1仓库也拥有完全的读写操作。
前2组测试完毕后可以发现,group1和group2都对账户gaohongyan1进行了权限的配置,而group2中的gaohongyan1账号拥有读写权限,所以可以总结出如果各个group中有相同的用户时则使用权限最大的那个权限。根据这个总结,可以得出用户gaohongyan2只拥有读权限,所以使用gaohongyan2账号执行Import操作时出现错误如图1.71所示。
图1.71 账号gaohongyan2只拥有读权限不能Import导入
1.6.4 共用authz权限文件与[/]和[/xx/yy]和[repository:/xx/yy]路径
在启动CollabNet Subversion svnserve服务时,可执行文件的路径如图1.72所示。
图1.72 启动服务的选项
完整的路径为:
"C:\Program Files\CollabNet\Subversion Server\svnserve.exe" --service -r "c:\svn_repository" --listen-port "3690"
其中启动参数"c:\svn_repository"的含义是将"c:\svn_repository"路径中所有的文件夹当成仓库,这些信息被加载到内存中供svn://协议调用。
这时如果在authz文件中使用[/]来配置权限,会对所有仓库的根目录进行权限配置,注意,要有一个前题,这些仓库使用同一个authz验证文件。
Step01:在C:\svn_repository路径中创建a和b仓库,如图1.73所示。
图1.73 创建a和b仓库
Step02:对C:\svn_repository\a\conf\authz文件编辑代码如下:
[/]
ghy1=r
ghy2=r
符号[/]代表在a仓库中就定义了对所有仓库根文件夹拥有读权限。
Step03:对C:\svn_repository\a\conf\passwd文件编辑代码如下:
[users]
ghy1=123
ghy2=123
Step04:对C:\svn_repository\a\conf\svnserve.conf文件编辑代码如下:
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
Step05:重启SVN及Apache服务。
Step06:当用ghy1账号向仓库a执行Import时,在登陆界面中输入ghy1如图1.74所示。
图1.74 登陆界面输入ghy1
Step07:当单击OK按钮时出现异常如图1.75所示。
图1.75 账号ghy1没有写权限
Step08:当对仓库b执行Import导入时直接出现异常界面,而没有出现登陆界面,如图1.76所示。
图1.76 直接出现异常界面
为什么会是这样的情况呢?其实很简单,因为仓库b的路径C:\svn_repository\b\conf中的所有文件都是默认的,并没有被更改,所以如果使用svn://协议向仓库b导入数据时默认是只读不可写的。
Step09:使用[/]配置的主要目的就是创建1个全局的仓库根文件夹权限,因为[/]会对所有仓库添加权限。这时可以将a仓库中的authz文件和passwd文件移动到C:\allauthz文件夹中,然后配置C:\svn_repository\a\conf\svnserve.conf内容如下:
[general]
anon-access = read
auth-access = write
password-db = C:\allauthz\passwd
authz-db = C:\allauthz\authz
Step10:继续配置C:\svn_repository\b\conf\svnserve.conf内容如下:
[general]
anon-access = read
auth-access = write
password-db = C:\allauthz\passwd
authz-db = C:\allauthz\authz
Step11:更改C:\allauthz\authz文件内容如下:
[/]
ghy1=r
ghy2=rw
Step12:更改C:\allauthz\ passwd文件内容如下:
[users]
ghy1=123
ghy2=123
Step13:重启SVN和Apache服务。
Step14:测试结果如下:
用ghy1账号对a仓库根文件夹执行Import时出现没有权限的异常。
用ghy1账号对b仓库根文件夹执行Import时出现没有权限的异常。
用ghy2账号对a仓库根文件夹执行Import时成功导入。
用ghy2账号对b仓库根文件夹执行Import时成功导入。
说明创建1个通用的authz及passwd文件是成功的。
上面的步骤是创建1个通用的authz及passwd文件,使用[/]选项来对每个仓库进行权限配置。那么[/]配置的写法还有另外一种,也就是[/路径/路径/路径]这样的写法,此种写法的主要目的是对每个仓库的各个“/路径/路径/路径”路径进行权限的配置。
Step15:更改C:\allauthz\authz文件内容如下:
[/]
ghy1=r
ghy2=rw
[/trunk]
ghy1=r
ghy2=rw
上面的配置[/]使ghy1用户对每个仓库的根文件夹拥有读权限,ghy2拥有读写权限。
而配置[/trunk]使ghy1用户对每个仓库的/trunk路径拥有读权限,ghy2用户拥有读写权限。
Step16:重启SVN和Apache服务。
Step17:测试结果如下:
用ghy1账号对a仓库根文件夹执行Import时出现没有权限的异常。
用ghy1账号对b仓库根文件夹执行Import时出现没有权限的异常。
用ghy2账号对a仓库根文件夹执行Import时成功导入。
用ghy2账号对b仓库根文件夹执行Import时成功导入。
用ghy1账号对a仓库/ trunk执行Import时出现没有权限的异常。
用ghy1账号对b仓库/ trunk执行Import时出现没有权限的异常。
用ghy2账号对a仓库/ trunk执行Import时成功导入。
用ghy2账号对b仓库/ trunk执行Import时成功导入。
上面的实验可以总结出TortoiseSVN软件可以针对每一个目录进行权限的控制。
通过[/]可以对所有的仓库的根目录进行权限的配置,使用选项[/xx/yy]可以对所有仓库的指定文件夹进行权限的配置,还可以使用[repository:/xx/yy]来对指定仓库的指定文件夹进行权限的配置。
Step18:更改C:\allauthz\authz文件内容如下:
[a:/trunk]
ghy1=rw
[b:/trunk]
ghy2=r
Step19:重启SVN和Apache服务。
Step20:测试结果如下:
用ghy1账号对a仓库trunk执行Import时成功导入。
用ghy1账号对b仓库trunk执行Import时出现没有权限的异常。
用ghy2账号对a仓库trunk执行Import时出现没有权限的异常。
用ghy2账号对b仓库trunk执行Import时出现没有权限的异常。
1.6.5 标记$authenticated和$anonymous和*和~
在学习新的知识点前,使用前面章节的实验环境来学习新的知识。
标记$authenticated代表任意登陆用户,标记$anonymous代表任意匿名用户,*代表任意人。~代表将当前角色的权限进行反转,也就是取反的操作。
Step01:更改C:\allauthz\authz文件内容如下:
[a:/trunk]
$authenticated=r
Step02:重启SVN和Apache服务。
Step03:用ghy1账号对a仓库trunk执行Import时出现没有权限的异常。
Step04:用ghy2账号对a仓库trunk执行Import时出现没有权限的异常。
Step05:更改C:\allauthz\authz文件内容如下:
[a:/trunk]
*=rw
Step06:重启SVN和Apache服务。
Step07:用ghy1账号对a仓库trunk执行Import时成功导入。
Step08:用ghy2账号对a仓库trunk执行Import时成功导入。
Step09:更改C:\allauthz\authz文件内容如下:
[a:/trunk]
~$anonymous =r
配置~$anonymous =r的作用代表非匿名用户对trunk文件夹可读不可写。
Step10:重启SVN和Apache服务。
Step11:
用ghy1账号对a仓库trunk执行Import时出现没有权限的异常。
用ghy2账号对a仓库trunk执行Import时出现没有权限的异常。
Step12:更改C:\allauthz\authz文件内容如下:
[a:/trunk]
$authenticated =
配置$authenticated =代表登陆用户对trunk文件夹不可读不可写,也就是无任何权限。
1.6.6 权限的继承与存在*=和不存在的区别
在SVN中,权限是可以继承的,本实验就来验证这个权限继承的特性,还要验证一下*=配置的作用。
Step01:创建新的仓库ghytest,如图1.77所示。
图1.77 创建ghytest仓库
Step02:更改C:\svn_repository\ghytest\conf路径中svnserve.conf文件的配置代码如下:
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = C:\svn_repository\ghytest\conf\authz
Step03:更改C:\svn_repository\ghytest\conf路径中passwd文件的配置代码如图1.78所示。
图1.78 添加1个ghyghy账号密码123
Step04:更改C:\svn_repository\ghytest\conf\authz文件的配置代码如图1.79所示。
图1.79 配置authz权限文件
Step05:重启SVN和Apache服务后测试结果如下:
使用ghyghy1用户对ghytest根文件夹执行Import导入成功
使用ghyghy2用户对ghytest根文件夹执行Import导入成功
使用ghyghy1用户对ghytest根文件夹中的trunk文件夹执行Import导入成功
使用ghyghy2用户对ghytest根文件夹中的trunk文件夹执行Import导入成功
上面的步骤说明如果对仓库的根目录配置了rw权限,那么在默认的情况下,对所有的子孙文件夹都具有rw权限,这就是SVN权限的继承。
Step06:更改C:\svn_repository\ghytest\conf\authz文件的配置代码如图1.80所示。
图1.80 加入*=的配置
Step07:重启SVN和Apache服务后测试结果如下:
使用ghyghy1用户对ghytest根文件夹执行Import导入成功
使用ghyghy2用户对ghytest根文件夹执行Import导入成功
使用ghyghy1用户对ghytest根文件夹中的trunk文件夹执行Import导入失败
使用ghyghy2用户对ghytest根文件夹中的trunk文件夹执行Import导入成功
那么上面的配置代码:
[ghytest:/trunk]
*=
ghyghy2=rw
作用就是ghyghy2用户拥有对ghytest:/trunk路径的读写权限,*=代表其它用户没有读写权限,也就是ghyghy1用户都找不到trunk文件夹,trunk文件夹对ghyghy1用户是隐藏的。
1.6.7 权限配置*=r和*=之间的区别
Step01:创建测试用的仓库abc,配置abc仓库中的C:\svn_repository\abc\conf\svnserve.conf文件内容如图1.81所示。
图1.81 文件svnserve.conf的配置
Step02:配置abc仓库中的C:\svn_repository\abc\conf\authz文件内容如图1.82所示。
图1.82 文件authz的配置
Step03:配置abc仓库中的C:\svn_repository\abc\conf\passwd文件内容如图1.83所示。
图1.83 文件password的配置
Step04:重启SVN和Apache服务。
Step05:使用svn://协议访问abc仓库,url如下:
svn://localhost/abc
在IE上弹出登陆界面如图1.84所示。
图1.84 弹出登陆界面
Step06:在登陆界面中输入账号ghy1及密码123后单击OK按钮弹出无权限访问的提示,效果如图1.85所示。
图1.85 不可读
说明权限*=的作用使URL路径不可以访问。
Step07:更改C:\svn_repository\abc\conf\authz文件内容如图1.86所示。
图1.86 文件authz的配置
Step08:重启SVN和Apache服务。
Step09:使用svn://协议访问abc仓库,url如下:
svn://localhost/abc
在IE上弹出登陆界面输入ghy1及123后正确显示出仓库中的内容,如图1.87所示。
图1.87 仓库abc可读
Step10:尝试着向abc仓库导入数据时出现异常如图1.88所示。
图1.88 可读不可写
说明权限*=r的作用使URL路径中的内容可读但不可写。
1.6.8 取消自动登陆
如果在登陆的界面中对选项进行了复选,也就意味着使用自动登陆,如图1.89所示。
图1.89 自动登陆
如果想取消自动登陆,可以将C:\Documents and Settings\class\Application Data\Subversion\auth\svn.simple路径中的文件删除,这时自动登陆功能取消了,重新显示出登陆界面了。
另外也可以进入TortoiseSVN的settings设置界面单击Authentication data右边的Clear按钮也可以取消自动登陆,如图1.90所示。
图1.90 单击Clear按钮
单击按钮的本质其实还是将C:\Documents and Settings\class\Application Data\Subversion\auth\svn.simple路径中的文件进行删除。
1.6.9 权限配置中/符号的注意事项
在前面对仓库的根文件夹配置权限时使用如下的配置代码:
[abc:/]
配置根文件夹时要使用/符号,但需要注意的是,对其子文件夹的配置一定不要加/符号,不然会出现无权限的错误。
Step01:继续使用前面实验用的仓库abc,更改authz文件配置代码如下:
[abc:/trunk]
*=r
Step02:重启SVN和Apache服务。
Step03:使用svn://协议访问abc仓库,url如下:
svn://localhost/abc/trunk
Step04:弹出登陆界面中输入账号ghy1及密码123后正确显示trunk文件夹中的内容如图1.91所示。
图1.91 显示trunk文件夹中的内容
Step05:更改authz文件配置代码如下:
[abc:/trunk/]
*=r
Step06:重启SVN和Apache服务。
Step07:使用svn://协议访问abc仓库,url如下:
svn://localhost/abc/trunk
出现界面如图1.92所示。
图1.92 加了/符号就是无权限
1.7 使用HTTP协议操作仓库的权限配置
前面的章节都是使用svn://协议来操作SVN仓库,其实还可以将svn与Apache服务器结合来实现基于http协议的版本控制。
在文件C:\Program Files\CollabNet\Subversion Server\httpd\conf\httpd.conf结尾处有默认的配置代码:
<Location /svn>
DAV svn
SVNParentPath C:\svn_repository
</Location>
也就是使用URL:http://localhost:7070/svn/a就可以访问仓库a,当看到如图1.93所示的界面时说明可以使用http协议正常访问svn的仓库。
图1.93 使用http协议访问svn正常
配置代码SVNParentPath C:\svn_repository表示C:\svn_repository下的每个子目录都是一个版本库,可以通过http://ip:7070/svn/a或http://ip:7070/svn/b来访问。
但虽然通过http协议可以访问svn服务,但并未设置权限,所以下一步就需要在Apache服务器软件中配置操作svn服务的权限了。
Step01:创建仓库z。
Step02:并使用htpasswd.exe命令在c:\password.ini文件中创建2个账号abc1及abc2。
Step03:编辑C:\allauthz\authz文件内容如下:
[z:/trunk]
abc1=r
abc2=rw
Step04:编辑文件C:\Program Files\CollabNet\Subversion Server\httpd\conf\httpd.conf添加验证的配置代码:
LoadModule authz_svn_module modules/mod_authz_svn.so
Step05:并继续添加配置代码:
<Location /svn>
DAV svn
SVNParentPath C:\svn_repository
AuthzSVNAccessFile C:\allauthz\authz
Require valid-user
AuthType Basic
AuthName "Subversion repository"
AuthUserFile c:\password.ini
</Location>
Step06:重启SVN和Apache服务器。
Step07:当输入网址:
http://localhost:7070/svn/z/trunk/
后弹出登陆界面如图1.94,使用abc1用户登陆后显示出仓库中的内容。
图1.94 使用abc1账号登陆
Step08:当使用账号abc1向http://localhost:7070/svn/z/trunk/导入Import数据时出现无权限的异常,而使用账号abc2向http://localhost:7070/svn/z/trunk/导入Import数据时则正常,说明权限配置成功。
上面的实验说明SVN的authz文件可以与Apache服务器进行整合,从而在使用基于http://协议访问仓库时进行权限的配置。
Step09:继续更改C:\allauthz\authz文件中的配置如下:
[/]
*=
[z:/trunk]
ghy1=rw
上面配置代码的作用是将ghy1用户只拥有z仓库的trunk文件夹的读写操作,对其它文件夹无任何的权限。