似乎存在路径继承问题,这让我对访问限制感到困惑。例如,如果我授予rw
一个组/用户访问权限,并希望将其限制/../../secret
为无,它会立即向我吐口水。
这是我试图在 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
可以rw
访问所有存储库,同时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 上运行
答案1
经过一系列的头痛之后,我让这个闲置* = rw
了SVNParentPath
。回想起来,我突然有一种明显的感觉击中了我;读取顺序是问题所在。
首先,我的示例命名约定完全错误,因为它应该是这样[<repo_name>:<path-in-repo>]
。我的实际约定是正确的,因此语法不是根源。
主要问题是 authz 文件需要应用第一个读取规则或可用匹配的“特异性”顺序。就我而言,一切都将与根匹配,并且一劳永逸。因此,通过颠倒我的示例顺序:
[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
会让它被接受并按规矩执行。这是行为未记录在我看来,这是因为一些微不足道的事情而造成的严重混乱。