:::: MENU ::::

Trac0.11でFine grained permissionsを使う

インストール方法

# easy_install configobj
# cd $TRAC_ENV/projectname/plugins
# wget http://trac.edgewall.org/export/10955/tags/trac-0.11.7/sample-plugins/permissions/authz_policy.py

trac.ini の設定

# vi conf/trac.ini
[authz_policy]
authz_file = conf/authzpolicy.conf

[components]
authz_policy.* = enabled

[trac]
permission_policies = AuthzPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy

authzpolicy.conf の設定

権限を記述するファイル。trac.ini で指定した場所に置いておく。
サンプルはhttp://swapoff.org/files/authzpolicy.confにある。

このまま authzpolicy.conf を編集すればさくっといくと思ったが、
意外なところでつまずいてしまった。
正規表現を使って制限範囲を指定する場合、気をつけたい点は記述する順番!
正規表現で指定した範囲がかぶっていると、上の設定を是を見るようになっている。

制限に正規表現を使うときの注意点サンプル

デフォルトのパーミッションで anonymous に WIKI_VIEW をつけておらず、
すべてのユーザに PrivatePage 関係の wiki 以外、
全部の wiki を見られるように権限をつけたい場合の話。
#デフォルトのパーミッションつけろよといいたいがサンプルなので。。。

下記の設定を見ると、
まずすべてのユーザにすべての wiki を見られる権限を与えてから、
PrivatePage だけ見られないようにしているようにみえる。
だが残念ながら PrivatePage はだれでも閲覧が可能になっている。
#PrivatePage の john 以外のところを!WIKI_VIEW にしたが効果はなかった。

[wiki:*]
* = WIKI_VIEW

[wiki:PrivatePage@*]
john = WIKI_VIEW
* =

別の例を出すと、PrivatePage は john にしか見せたくないが、
その記述の上に頭に Private がつくページを jack はすべてみることができる設定を書くと、
jack は PrivatePage も見ることができてしまう。

[wiki:Private*]
jack = WIKI_VIEW
* =

[wiki:PrivatePage@*]
john = WIKI_VIEW
* =

そこで、上記の設定を逆に書いてみたらうまくいった。
予想だがはじめにすべて許可してしまうと、あとの設定は読まないのではないかと。
なのでちょっと気持ち悪いが、粒度が細かい制限したい項目を先に書いておく必要がある。

[wiki:PrivatePage@*]
john = WIKI_VIEW
* =

[wiki:Private*]
jack = WIKI_VIEW
* =

[wiki:*]
* = WIKI_VIEW