From 9f135e8c1d3bd4ea9405941c0d6893b6ace6f282 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Thu, 11 Jan 2024 12:27:39 +0530 Subject: [PATCH 1/3] fix: print perm check logs from DB query Doing has_permission and then manually raising exception erases the perm check messages. This causes insane amounts of confusion when perm error says X not permitted while user is trying to check Y. --- frappe/model/db_query.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index 62424ca0aa..f6e96267a6 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -521,14 +521,12 @@ class DatabaseQuery: def _set_permission_map(self, doctype: str, parent_doctype: str | None = None): ptype = "select" if frappe.only_has_select_perm(doctype) else "read" - val = frappe.has_permission( + frappe.has_permission( doctype, ptype=ptype, parent_doctype=parent_doctype or self.doctype, + throw=True, ) - if not val: - frappe.flags.error_message = _("Insufficient Permission for {0}").format(frappe.bold(doctype)) - raise frappe.PermissionError(doctype) self.permission_map[doctype] = ptype def set_field_tables(self): From b38199a3b358233f7dbd47714d5c05de8552088f Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Thu, 11 Jan 2024 12:34:15 +0530 Subject: [PATCH 2/3] fix: pass user to has_perm check --- frappe/model/db_query.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index f6e96267a6..106172a508 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -526,6 +526,7 @@ class DatabaseQuery: ptype=ptype, parent_doctype=parent_doctype or self.doctype, throw=True, + user=self.user, ) self.permission_map[doctype] = ptype From 0a38fb08135b6e9b3789b7b11fef35faddef0480 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Thu, 11 Jan 2024 13:09:43 +0530 Subject: [PATCH 3/3] fix: skip exc without exc id --- frappe/utils/response.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/utils/response.py b/frappe/utils/response.py index 927e3f3b38..0c18967ae5 100644 --- a/frappe/utils/response.py +++ b/frappe/utils/response.py @@ -62,7 +62,7 @@ def report_error(status_code): def _link_error_with_message_log(error_log, exception, message_logs): for message in message_logs: - if message.get("__frappe_exc_id") == exception.__frappe_exc_id: + if message.get("__frappe_exc_id") == getattr(exception, "__frappe_exc_id", None): error_log.update(message) message_logs.remove(message) error_log.pop("raise_exception", None)