Browse Source

feat: Ignore permlevel for specific fields

version-14
Nabin Hait 3 years ago
parent
commit
b4476e0257
2 changed files with 16 additions and 1 deletions
  1. +11
    -0
      frappe/core/doctype/user/test_user.py
  2. +5
    -1
      frappe/model/base_document.py

+ 11
- 0
frappe/core/doctype/user/test_user.py View File

@@ -130,6 +130,17 @@ class TestUser(unittest.TestCase):
# system manager is not added (it is reset) # system manager is not added (it is reset)
self.assertFalse("System Manager" in [d.role for d in me.roles]) 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") frappe.set_user("Administrator")


me = frappe.get_doc("User", "testperm@example.com") me = frappe.get_doc("User", "testperm@example.com")


+ 5
- 1
frappe/model/base_document.py View File

@@ -1096,7 +1096,11 @@ class BaseDocument(object):
to_reset = [] to_reset = []


for df in high_permlevel_fields: 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) to_reset.append(df)


if to_reset: if to_reset:


Loading…
Cancel
Save