我在 CentOS 7.4 上托管了 apache subversion 1.7.14,并且在获取基于路径的授权时遇到问题,这样一个特定分支的受限组可以从 apache Web 服务器导航到该分支。
示例结构是:
/svn/repo/projA
/svn/repo/projA/trunk
/svn/repo/projA/branches
/svn/repo/projA/branches/branch1
/svn/repo/projA/branches/branch2
/svn/repo/projB
/svn/repo/projC
我有几组用户,例如:
[groups]
svn-group1 = ...
svn-group2 = ...
我的目标是将 svn-group2 明确限制在 /svn/repo/projA/branches/branch1 并且不能访问任何其他分支,例如:
[/]
* =
@svn-group1 = rw
[repo:/projA/branches/branch1]
@svn-group2 = rw
但是,当导航到https://svn.example.com/repo/projA时,svn-group2 用户将收到一个禁止错误。只有当他们访问完整的 URL https://svn.example.com/repo/projA/branches/branch1时,他们才能获得访问权限。理想情况下,我希望 svn-group2 看到所有父级的叶子到根目录,以便他们“知道”他们可以从https://svn.example.com访问什么。
我可以通过明确排除每个兄弟叶子来获得正确的行为:
[/]
* =
@svn-group1 = rw
[repo:/projA/branches/branch1]
@svn-group2 = rw
[repo:/projA]
@svn-group2 = r
[repo:/projA/trunk]
@svn-group2 =
[repo:/projA/branches/branch2]
@svn-group2 =
[repo:/projB]
@svn-group2 =
[repo:/projC]
@svn-group2 =
这甚至有利于用户甚至看不到来自https://svn.example.com/repo的 projB 和 projC 的链接。只会看到 projA,然后是分支,然后是 branch1。
但是,这并不能保证 svn-group2 只会看到 branch1。我想保证如果 svn-group1 创建了一些新的分支, svn-group2 默认不会看到这个。
我发现了一些带有通配符功能的 :glob: 规则的提示,但我无法让它工作。我可以想象像下面这样的事情,其中通配符不包括兄弟分支。
[:glob:repo:/]
@svn-group2 = r
[:glob:repo:/*/]
@svn-group2 =
[repo:/projA]
@svn-group2 = r
[:glob:repo:/projA/*/]
@svn-group2 =
[repo:/projA/branches/]
@svn-group2 = r
[:glob:repo:/projA/branches/*/]
@svn-group2 =
[repo:/projA/branches/branch1]
@svn-group2 = rw
谢谢!