Trac-0.11のワークフローでTICKET_REVIEW権限を使う
と書いたは良いんですが、iniファイルの中にある「TICKET_REVIEW」なるアクションが定義されていて、「どうやって有効にするのかなぁ」と思っていたんですが、単にsample-plugins/workflow/CodeReview.pyを[プロジェクトディレクトリ]/pluginsにコピーすれば良かったんですね。Pythonは完全にアウェーなので、何か難しく考えすぎてました。。。
また、trac-0.11b1/sample-plugins/workflow/enterprise-review-workflow.iniがかなり参考になると思います。
$ sudo cp -p trac-0.11b1/sample-plugins/workflow/CodeReview.py trac/plugins/
$ trac-admin /path/to/trac_project permission list
User Action
--------------------------
anonymous BROWSER_VIEW
anonymous CHANGESET_VIEW
anonymous FILE_VIEW
anonymous LOG_VIEW
anonymous MILESTONE_VIEW
anonymous REPORT_SQL_VIEW
anonymous REPORT_VIEW
anonymous ROADMAP_VIEW
anonymous SEARCH_VIEW
anonymous TICKET_CREATE
anonymous TICKET_MODIFY
anonymous TICKET_VIEW
anonymous TIMELINE_VIEW
anonymous WIKI_CREATE
anonymous WIKI_MODIFY
anonymous WIKI_VIEW
Available actions:
CONFIG_VIEW, EMAIL_VIEW, MILESTONE_ADMIN, MILESTONE_CREATE,
MILESTONE_DELETE, MILESTONE_MODIFY, MILESTONE_VIEW, PERMISSION_ADMIN,
PERMISSION_GRANT, PERMISSION_REVOKE, REPORT_ADMIN, REPORT_CREATE,
REPORT_DELETE, REPORT_MODIFY, REPORT_SQL_VIEW, REPORT_VIEW, ROADMAP_ADMIN,
ROADMAP_VIEW, SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP,
TICKET_CREATE, TICKET_EDIT_CC, TICKET_MODIFY, TICKET_REVIEW, TICKET_VIEW,
TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, WIKI_CREATE, WIKI_DELETE,
WIKI_MODIFY, WIKI_VIEW
$
無事にTICKET_REVIEWが現れました。ということで、trac.iniを
[ticket-workflow] accept = new -> assigned accept.operations = set_owner_to_self accept.permissions = TICKET_MODIFY leave = * -> * leave.default = 1 leave.operations = leave_status reassign = new,assigned,reopened,in_work -> assigned reassign.operations = set_owner reassign.permissions = TICKET_MODIFY start = assigned -> in_work start.operations = set_owner_to_self start.permissions = TICKET_MODIFY reopen = verify,closed -> reopened reopen.operations = del_resolution reopen.permissions = TICKET_CREATE resolve = new,assigned,reopened,in_work -> verify resolve.operations = set_resolution resolve.permissions = TICKET_MODIFY verified = verify -> closed verified.permissions = TICKET_REVIEW
として、TICKET_REVIEWアクションを持つユーザーを追加しました。これで、このユーザーでないとチケットをclosedできないようにできました:-)