アクセス制限について私を悩ませているパス継承の問題があるようです。たとえば、1つのグループ/ユーザーに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で実行
たくさんの頭痛の種の後、私はこれをSVNParentPath
レベルの* = rw
でアイドル状態にしました。それに戻って、私は突然明らかな打撃を受けました。読み取り順序が問題でした。
第一に、私の命名規則は[<repo_name>:<path-in-repo>]
であるはずなので、完全に間違っていました。
主な問題は、authzファイルが、最初の読み取りルールまたは使用可能な一致が適用される「特異性」の順序を予期していることです。私の場合、すべてがルートと一致し、それは1回限りです。したがって、私の例の順序を逆にすることによって:
[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
それを受け入れさせ、動作どおりに実行します。これは文書化されておらず、私の意見では、まったく些細なことに対する深刻なスナフです。
権限を持つリポジトリにアクセスするには、完全な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
私は少し前に同じことに遭遇し、また解決策を思い付くことができませんでした。いくつかの安価なApacheエイリアスルールやsvn:external定義が役立つかもしれませんが、それが適度に複雑になった場合、今日はそれができないと思います。 WANdisco この機能に対するリクエストは多数あり、継承されていないアクセスと正規表現のサポートを備えた拡張認証に値する十分な勢いが得られる可能性があります。