fix: Dont assume user & permission_type in get_permitted_fileds

This commit is contained in:
Gavin D'souza 2023-04-21 17:31:58 +05:30
parent e06b6b31f3
commit 36ee97a8f8
2 changed files with 14 additions and 4 deletions

View file

@ -192,7 +192,10 @@ def delete_fields(args_dict, delete=0):
def get_permitted_fields(
doctype: str, parenttype: str | None = None, user: str | None = None
doctype: str,
parenttype: str | None = None,
user: str | None = None,
permission_type: str | None = None,
) -> list[str]:
meta = frappe.get_meta(doctype)
valid_columns = meta.get_valid_columns()
@ -204,7 +207,9 @@ def get_permitted_fields(
if set(valid_columns).issubset(default_fields):
return valid_columns
if permitted_fields := meta.get_permitted_fieldnames(parenttype=parenttype, user=user):
if permitted_fields := meta.get_permitted_fieldnames(
parenttype=parenttype, user=user, permission_type=permission_type
):
meta_fields = meta.default_fields.copy()
optional_meta_fields = [x for x in optional_fields if x in valid_columns]

View file

@ -532,7 +532,7 @@ class Meta(Document):
return self.high_permlevel_fields
def get_permitted_fieldnames(self, parenttype=None, *, user=None):
def get_permitted_fieldnames(self, parenttype=None, *, user=None, permission_type="read"):
"""Build list of `fieldname` with read perm level and all the higher perm levels defined.
Note: If permissions are not defined for DocType, return all the fields with value.
@ -545,7 +545,12 @@ class Meta(Document):
if not self.get_permissions(parenttype=parenttype):
return self.get_fieldnames_with_value()
permlevel_access = set(self.get_permlevel_access("read", parenttype, user=user))
if not permission_type:
permission_type = "select" if frappe.only_has_select_perm(self.name, user=user) else "read"
permlevel_access = set(
self.get_permlevel_access(permission_type=permission_type, parenttype=parenttype, user=user)
)
for df in self.get_fieldnames_with_value(with_field_meta=True, with_virtual_fields=True):
if df.permlevel in permlevel_access: