:::: MENU ::::

Trac0.11でFine grained permissionsを使う

Pocket

インストール方法

# 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

Pocket


So, what do you think ?