似乎有一个pathinheritance问题,这让我难以理解访问限制。 例如,如果我授予rw访问一个组/用户,并希望将它限制为/../../secret为none,它会立即吐出我的脸。
这里是我试图在dav_svn.authz中实现的一个例子
[groups] grp_W = a, b, c, g grp_X = a, d, f, e grp_Y = a, e, [/] * = @grp_Y = rw [somerepo1:/projectPot] @grp_W = rw [somerepo2:/projectKettle] @grp_X = rw
预期: grp_Y可以访问所有的存储库,而grp_W和grp_X只能访问它们各自的存储库。
发生了什么: grp_Y可以访问所有的存储库,而grp_W和grp_X无权访问
如果我将访问顺序翻转到每个人都可访问的位置,并将其限制在每个存储库中,那么它将忽略无效规则(剥离权限),并为每个人提供在根级授予的访问权限。
放弃组,它执行相同的用户特定的条款; 甚至完全定义如:
[/] a = rw b = c = d = e = f = g = rw [somerepo1:/projectPot] a = rw b = rw c = rw d = e = rw f = g = rw [somerepo2:/projectKettle] a = rw b c d = rw e = rw f = rw g
这产生完全相同的结果。 根据文件我遵循所有的协议,所以这是疯了。
使用dav_svn在Apache2上运行
经过一堆头痛之后,我让SVNParentPath级别的这个空闲* = rw 。 回想起来,我突然间受到了一丝打击, 阅读顺序是问题。
首先,我的命名惯例是错误的,因为它应该是[<repo_name>:<path-in-repo>]
主要的问题是,authz文件需要在第一个读取规则或可用匹配应用的地方进行“特异性”sorting。 在我的情况下,一切都将与根相匹配,这将是一劳永逸的。 从而颠倒我的示例sorting:
[groups] grp_W = a, b, c, g grp_X = a, d, f, e grp_Y = a, e, [ProjectPot:/] @grp_W = rw [ProjectKettle:/] @grp_X = rw [/] * = @grp_Y = rw
会使其接受和performance。 这是没有文件,在我看来是一个严重的事情,完全无关紧要。
我不久前遇到了同样的事情,也没有find解决办法。 一些廉价的Apache别名规则和/或SVN:外部定义可能会有所帮助,但如果它变得复杂,我不认为你今天可以做到。 WANdisco已经有了这个function的许多请求,它可能会得到足够的动力,以获得非inheritance访问和正则expression式支持authz增强。
你必须提供完整的URL才能访问有权限的存储库,否则需要提供这样的读取权限。
[groups] grp_W = a, b, c, g grp_X = a, d, f, e grp_Y = a, e, [/] * = @grp_Y = rw @grp_w = r @grp_x = r [somerepo1:/projectPot] @grp_W = rw [somerepo2:/projectKettle] @grp_X = rw