Trac/WikiAccessControl
Wikiのページ毎の閲覧権限を設定するためのプラグイン。数ヶ月前に作ったまま放置状態(^^; Fine grained permissionsの存在を知っていたら作らなかったかもしれませんが、せっかく作ったのでとりあえず公開しておきます。
プラグインの有効化はさておき、trac.iniにおいては以下のような感じの設定を行います。なお、別途、permission_policiesに、WikiAccessControlを追加しておく必要があります(例:permission_policies = WikiAccessControl, DefaultPermissionPolicy, LegacyAttachmentPolicy)。
[wikiaccesscontrols]
control_pages = testpage
testpage.action = WIKI_MODIFY
testpage.regex = testpage.*,dumm.
上記のような設定の場合、testpageで始まるWikiページおよび、dummyやdumm0といったページ群(正規表現で指定。複数ある場合はカンマでつなぎます)に対して編集を行うためのコントロールtestpageが定義されます。
この状態においては、testpageで始まるWikiページなどを編集するためには、WIKI_ACCESS_TESTPAGE という権限(iniファイルを元に自動的に権限が追加されます)を割り当てる必要があります。
なお、actionにWIKI_VIEWが指定されている場合は、閲覧するためにその権限が必要となります(例えば、testpage.action = WIKI_VIEW,WIKI_MODIFY と指定した場合、該当ページを見るためにWIKI_ACCESS_TESTPAGE権限が必要となります)。他に、WIKI_DELETEも利用可能なので、ページによって削除可否を切り替えることも可能となります。
複数のコントロールを作成する場合は、control_pagesに対してカンマ区切りでコントロール名を定義し、それに対するactionおよびregexをiniファイルに記述していけばOKです。
設定が少し面倒ですが、頑張れば「基本は全員が全ページ閲覧OKだけど、あるエリアに含まれるページはリーダーしか閲覧できない」というような設定を複数作成する(チーム毎に閲覧可能なページも変わってきたりとか)など、いろいろな運用ができる・・・と思います。
※他にWIKI_ACCESS_ALLという権限もあります。この権限が割り当てられている場合は、全てのコントロールに対する権限が割り当てられていることとなります。
2010/01/23 コメントで指摘された不具合を修正しました(r244)。
2011/08/01 permission_policiesの設定が必要である旨を記載しました。
The comments to this entry are closed.
Comments
Fine grained permissionsはConfigObjが必要だったり、別途設定ファイルを記述しないといけないので、WikiAccessControlを使わせて頂いています。どうもありがとうございます。
ただ、accesscontrol.pyの91行目のbreakでforを抜けても、一番外側のforが回ると変数wの値が書きかわり、意図した通りの権限が設定されないようです。
その部分を直し、(+チケットの細かい権限設定のプラグインもセットにして)下記サイトで公開しております。
http://sourceforge.jp/projects/shibuya-trac/wiki/plugins%2FAccessControlPlugin
Posted by: wadahiro | 2009.10.27 01:15
ご返信が遅くなりましたが、ご利用ありがとうございます&ご指摘ありがとうございました。
私の公開しているプラグインに関しても、breakの挙動が正しくなかった部分を修正したものに差し替えました。
Posted by: syo | 2010.01.23 21:50