<pre style='margin:0'>
Rainer Müller (raimue) pushed a commit to branch master
in repository trac.macports.org.
</pre>
<p><a href="https://github.com/macports/trac.macports.org/commit/12f6b290dd65557edde2ec7a88074b7134f2a968">https://github.com/macports/trac.macports.org/commit/12f6b290dd65557edde2ec7a88074b7134f2a968</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 12f6b29 Enable TicketReporterPermissionsPolicy
</span>12f6b29 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 12f6b290dd65557edde2ec7a88074b7134f2a968
</span>Author: Rainer Müller <raimue@macports.org>
AuthorDate: Thu Apr 5 21:51:37 2018 +0000
<span style='display:block; white-space:pre;color:#404040;'> Enable TicketReporterPermissionsPolicy
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Allow ticket reporters to modify summary, description, and all other
</span><span style='display:block; white-space:pre;color:#404040;'> fields of a ticket with a custom plugin.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Closes: https://trac.macports.org/ticket/53755
</span>---
.gitignore | 1 +
conf/trac.ini | 2 +-
plugins/TicketReporterPermissionsPolicy.py | 34 ++++++++++++++++++++++++++++++
3 files changed, 36 insertions(+), 1 deletion(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/.gitignore b/.gitignore
</span><span style='display:block; white-space:pre;color:#808080;'>index dce4f7a..44e4214 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/.gitignore
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/.gitignore
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3,3 +3,4 @@
</span> /db/
/attachments/
/files/
<span style='display:block; white-space:pre;background:#e0ffe0;'>+*.pyc
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/conf/trac.ini b/conf/trac.ini
</span><span style='display:block; white-space:pre;color:#808080;'>index 79c089e..ae605e2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/conf/trac.ini
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/conf/trac.ini
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -372,7 +372,7 @@ jquery_ui_location =
</span> jquery_ui_theme_location =
mysqldump_path = mysqldump
never_obfuscate_mailto = disabled
<span style='display:block; white-space:pre;background:#ffe0e0;'>-permission_policies = ReadonlyWikiPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+permission_policies = TicketReporterPermissionsPolicy, ReadonlyWikiPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy
</span> permission_store = DefaultPermissionStore
pg_dump_path = pg_dump
resizable_textareas = enabled
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/plugins/TicketReporterPermissionsPolicy.py b/plugins/TicketReporterPermissionsPolicy.py
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..dd273d8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/plugins/TicketReporterPermissionsPolicy.py
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,34 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8 -*-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This is based on an example from the Trac CookBook:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://trac.edgewall.org/wiki/CookBook/PermissionPolicies#GrantapermissiontotheTicketOwner
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+from trac.core import *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+from trac.perm import IPermissionPolicy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+from trac.resource import ResourceNotFound
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+from trac.ticket.model import Ticket
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+class TicketReporterPermissionsPolicy(Component):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ """Grants permissions to the ticket reporter."""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ implements(IPermissionPolicy)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ allowed_actions = (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 'TICKET_CHGPROP',
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 'TICKET_EDIT_DESCRIPTION')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # IPermissionPolicy methods
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ def check_permission(self, action, username, resource, perm):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if action in self.allowed_actions and \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ resource is not None and \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ resource.realm == 'ticket' and \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ resource.id is not None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ try:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ticket = Ticket(self.env, resource.id)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ except ResourceNotFound:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pass
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if ticket['reporter'] == username:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return True
</span></pre><pre style='margin:0'>
</pre>