fix: track all impersonated changes

This commit is contained in:
Ankush Menat 2024-02-24 16:29:34 +05:30
parent 0fd4d6b67f
commit be47ee0e31
4 changed files with 20 additions and 0 deletions

View file

@ -30,10 +30,18 @@ class Version(Document):
else: else:
return self.set_diff(old, new) return self.set_diff(old, new)
@staticmethod
def set_impersonator(data):
if not frappe.session:
return
if impersonator := frappe.session.data.get("impersonated_by"):
data["impersonated_by"] = impersonator
def set_diff(self, old: Document, new: Document) -> bool: def set_diff(self, old: Document, new: Document) -> bool:
"""Set the data property with the diff of the docs if present""" """Set the data property with the diff of the docs if present"""
diff = get_diff(old, new) diff = get_diff(old, new)
if diff: if diff:
self.set_impersonator(diff)
self.ref_doctype = new.doctype self.ref_doctype = new.doctype
self.docname = new.name self.docname = new.name
self.data = frappe.as_json(diff, indent=None, separators=(",", ":")) self.data = frappe.as_json(diff, indent=None, separators=(",", ":"))
@ -51,6 +59,7 @@ class Version(Document):
"updater_reference": updater_reference, "updater_reference": updater_reference,
"created_by": doc.owner, "created_by": doc.owner,
} }
self.set_impersonator(data)
self.ref_doctype = doc.doctype self.ref_doctype = doc.doctype
self.docname = doc.name self.docname = doc.name
self.data = frappe.as_json(data, indent=None, separators=(",", ":")) self.data = frappe.as_json(data, indent=None, separators=(",", ":"))

View file

@ -227,7 +227,12 @@ function get_version_timeline_content(version_doc, frm) {
} }
} }
}); });
const impersonated_by = data.impersonated_by;
if (impersonated_by) {
const impersonated_msg = __("Impersonated by {0}", [get_user_link(impersonated_by)]);
out = out.map((message) => `${message} · ${impersonated_msg.bold()}`);
}
return out; return out;
} }

View file

@ -16,6 +16,11 @@
{%= __("Read Only Mode") %} {%= __("Read Only Mode") %}
</span> </span>
{% } %} {% } %}
{% if (frappe.boot.user.impersonated_by) { %}
<span class="indicator-pill red no-indicator-dot" title="{%= __("You are impersonating as another user.") %}">
{%= __("Impersonating {0}", [frappe.boot.user.name]) %}
</span>
{% } %}
<div class="input-group search-bar text-muted hidden"> <div class="input-group search-bar text-muted hidden">
<input <input
id="navbar-search" id="navbar-search"

View file

@ -166,6 +166,7 @@ def get():
bootinfo["setup_complete"] = cint(frappe.get_system_settings("setup_complete")) bootinfo["setup_complete"] = cint(frappe.get_system_settings("setup_complete"))
bootinfo["desk_theme"] = frappe.db.get_value("User", frappe.session.user, "desk_theme") or "Light" bootinfo["desk_theme"] = frappe.db.get_value("User", frappe.session.user, "desk_theme") or "Light"
bootinfo["user"]["impersonated_by"] = frappe.session.data.get("impersonated_by")
return bootinfo return bootinfo