如何为不同的写权限配置SVN Web访问?

aba*_*hev 4 svn apache apache2

我正在尝试在Windows Server 2008下的Apache2上配置SVN Web访问以获得不同的写入权限.

我有下一个Apache2 conf:

<Location /svn>
 SVNParentPath "E:\SVN"

 DAV svn
 SVNListParentPath on
 AuthType Basic
 AuthName "Subversion repositories"
 Require valid-user

 AuthUserFile svn-auth.txt
 AuthzSVNAccessFile svn-acl.txt
</Location>

<Location /svn/foobar>
 SVNParentPath "E:\SVN\foobar"

 DAV svn
 SVNListParentPath on
 AuthType Basic
 AuthName "Subversion repositories"
 Require valid-user

 AuthUserFile svn-auth.txt
 AuthzSVNAccessFile svn-acl.txt
</Location>
Run Code Online (Sandbox Code Playgroud)

E:\SVN是所有存储库的根目录 - 我想列出所有存储库.它包含E:\SVN\test- 是一个项目存储库.

E:\SVN\foobar- 是包含E:\SVN\foobar\fooE:\SVN\foobar\bar- 项目存储库的子根目录 .

文件svn-auth.txt包含由生成的许多用户密码htpasswd.exe

文件svn-acl.txt包含写访问规则,但它不起作用!事件它只包含一个全局权限:

[/]
* = rw
Run Code Online (Sandbox Code Playgroud)

SVN的Apache2配置SVNPath和之间的区别是什么SVNParentPath?也许它会有意义吗?

当然,如果添加组或用户,它也不起作用:

[groups]
full = abatishchev

[/]
* = r
@full = rw
abatishchev = rw
Run Code Online (Sandbox Code Playgroud)

我到了403 Forbiden.

我究竟做错了什么?TIA!

更新:我从error.log找到了一条记录:

The URI does not contain the name of a repository.  [403, #190001]
Run Code Online (Sandbox Code Playgroud)

这意味着什么?

Red*_*yph 5

SVNPath用于一个存储库,SVNParentPath用于包含多个存储库的根目录.因此,您应该删除Apache配置文件中的第二个位置,因为如果您尝试访问它,它将与第一个位置冲突http://<host>/svn/foobar.

您应该为访问和身份验证文件设置绝对路径,确保Apache服务具有对父目录和所有存储库的读/写访问权限,以及对这些访问和身份验证文件的读访问权限,这在手动安装中经常被忽略.

例如:

<Location /svn>
    RedirectMatch ^(/svn)$ $1/
    SVNParentPath E:\SVN

    DAV svn
    SVNListParentPath on
    AuthType Basic
    AuthName "Subversion repositories"
    Require valid-user

    AuthUserFile C:\SVN\conf\svn-auth.txt
    AuthzSVNAccessFile C:\SVN\conf\svn-acl.txt
</Location>
Run Code Online (Sandbox Code Playgroud)

您将在使用Subversion的Version Control中找到所有必要的信息(这是指向最新版本的链接,尽管Apache配置设置最近没有更改).

然后,您应该能够为存储库指定组和用户的全局或个人权限.可以在此处找到示例,其中包含您提供的名称:

[groups]
full = abatishchev, anotherguy
main = abatishchev

[/]
* = r
@full = rw
abatishchev = rw

[foobar:/]
* =
@main = rw
full = r

[otherproject:/]
@main = rw
full = r
Run Code Online (Sandbox Code Playgroud)

在这个例子中,你已经设置了一般规则[/],然后是特定的规则foorbar(以及下面的所有内容),以及otherproject.您甚至可以为存储库的各个目录指定特定规则.