我已经设置了一个使用 Apache DAV 和 LDAP 服务的 SVN 存储库。当我使用对整个存储库具有读/写权限的用户访问存储库时,一切正常。
该存储库有许多项目,如下所示:
repo_src
\a
\b
\c
\d
.. etc..
我需要授予某个用户“A”对某个子目录“a”的访问权限,但不能授予其父目录或其兄弟目录(b、c、d 等)的访问权限。
我阅读了有关基于路径的授权的书“带有 Subversion 的版本控制”(http://svnbook.red-bean.com/en/1.6/svn-book.html#svn.serverconfig.pathbasedauthz)。我完全按照那里的规定做了:我用这样的东西编辑了文件 svn.authz:
[src_repo:/a]
A = rw
[src_repo:/]
root = rw
在 Apache 中,svn 配置文件如下所示:
<Location /svn>
DAV svn
SVNParentPath /data/repos/
AuthName "Zentyal LDAP user required"
AuthType Basic
AuthBasicProvider ldap file
AuthBasicAuthoritative On
AuthzLDAPAuthoritative off
AuthLDAPURL ....
AuthLDAPBindDN ....
AuthLDAPBindPassword ...
AuthUserFile /dev/null
uthzSVNAccessFile /etc/apache2/svn.authz
require valid-user
</Location>
当我以用户 A 通过 WEB 界面 ( ) 访问子目录 src_repo/a 时http://host/svn/ src_repo/a
,我可以读取该目录及其文件的内容。但是,当我尝试 http://host/svn/src_repo/a
使用 TortoiseSVN 浏览目录或使用“svn checkout http://host/svn/src_repo/a
”检出内容时,我收到以下消息:
svn:E175002:服务器发送意外返回值(405 方法不允许)响应 PROPFIND 请求“/”
显然 TortoiseSVN 和 svn 客户端正在尝试访问“/”(这不是故意的)。
如何设置 svn 服务器只允许子目录访问?为什么 WEB 访问不同于命令行或 TotoiseSVN 访问?