diff --git a/frappe/core/doctype/user/test_user.py b/frappe/core/doctype/user/test_user.py index 16a46e356c..151dd40308 100644 --- a/frappe/core/doctype/user/test_user.py +++ b/frappe/core/doctype/user/test_user.py @@ -130,6 +130,17 @@ class TestUser(unittest.TestCase): # system manager is not added (it is reset) self.assertFalse("System Manager" in [d.role for d in me.roles]) + # ignore permlevel using flags + me.flags.ignore_permlevel_for_fields = ["roles"] + me.add_roles("System Manager") + + # system manager now added due to flags + self.assertTrue("System Manager" in [d.role for d in me.get("roles")]) + + # reset flags + me.flags.ignore_permlevel_for_fields = None + + # change user frappe.set_user("Administrator") me = frappe.get_doc("User", "testperm@example.com") diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index 59c631eb95..d73464cb06 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -1096,7 +1096,11 @@ class BaseDocument(object): to_reset = [] for df in high_permlevel_fields: - if df.permlevel not in has_access_to and df.fieldtype not in display_fieldtypes: + if ( + df.permlevel not in has_access_to + and df.fieldtype not in display_fieldtypes + and df.fieldname not in self.flags.get("ignore_permlevel_for_fields", []) + ): to_reset.append(df) if to_reset: