fix: Dont assume user & permission_type in get_permitted_fileds
This commit is contained in:
parent
e06b6b31f3
commit
36ee97a8f8
2 changed files with 14 additions and 4 deletions
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue