似乎存在一个路径继承问题,它让我对访问限制感到困惑。例如,如果我授予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
会使其被接受并按预期执行。这没有记录在案,在我看来,这是对一些微不足道的事情的严重混乱。
答案2
不久前我也遇到过同样的问题,但也没能找到解决办法。一些简单的 apache 别名规则和/或 svn:external 定义可能会有所帮助,但如果问题变得相当复杂,我认为你今天无法解决。 万迪斯科已经收到了许多针对此功能的要求,并且它可能获得足够的动力来增强具有非继承访问和正则表达式支持的身份验证。
答案3
您必须提供完整的 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