使用 davsvnauthz 设置 SVN 权限

使用 davsvnauthz 设置 SVN 权限

似乎存在路径继承问题,这让我对访问限制感到困惑。例如,如果我授予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_Wgrp_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

经过一系列的头痛之后,我让这个闲置* = rwSVNParentPath。回想起来,我突然有一种明显的感觉击中了我;读取顺序是问题所在。

首先,我的示例命名约定完全错误,因为它应该是这样[<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

会让它被接受并按规矩执行。这是行为未记录在我看来,这是因为一些微不足道的事情而造成的严重混乱。

相关内容