[PATCH v4 2/4] Include the responsible actor in applicable events
stephen at that.guru
Sun Dec 1 23:11:49 AEDT 2019
On Sun, 2019-12-01 at 02:49 +0100, Johan Herland wrote:
> We want to use the events as an audit log. An important part of this is
> recording _who_ made the changes that the events represent.
> To accomplish this, we need to know the current user (aka. request.user)
> at the point where we create the Event instance. Event creation is
> currently triggered by signals, but neither the signal handlers, nor the
> model classes themselves have easy access to request.user.
> For some Patch-based events (patch-state-changed, patch-delegated), we
> can do the following hack: The relevant events are created in signal
> handlers that are all hooked up to either the pre_save or post_save
> signals sent by Patch.save(). But before calling Patch.save(),
> Patchwork must naturally query Patch.is_editable() to ascertain whether
> the patch can in fact be changed by the current user. Thus, we only
> need a way to communicate the current user from Patch.is_editable()
> to the signal handlers that create the resulting Events. The Patch
> object itself is available in both places, so we simply add an
> ._edited_by attribute to the instance (which fortunately is not
> detected as a persistent db field by Django).
> For the check-created event the current user always happens to be the
> same as the .user field recorded in the Check object itself.
> For the other Patch-based events (patch-created, patch-completed, and
> series-completed), although they are also triggered by Patch.save(),
> they are triggered as a result of incoming emails, hence have no real
> actor as such, so we simply leave the actor as None/NULL. The same
> argumen also applies to the cover-created and series-created events.
> Closes: #73
> Cc: Mauro Carvalho Chehab <mchehab+samsung at kernel.org>
> Signed-off-by: Johan Herland <johan at herland.net>
Reviewed-by: Stephen Finucane <stephen at that.guru>
More information about the Patchwork