From a1bb73407905c66ffa8f4d5935e1cc70d3d745b8 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Thu, 18 Apr 2024 15:01:49 +0530 Subject: [PATCH] fix: filter select perm in get_doctypes_with_read closes https://github.com/frappe/frappe/issues/26015 Extracted from https://github.com/frappe/frappe/pull/26018 --- frappe/permissions.py | 2 +- frappe/tests/test_permissions.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/frappe/permissions.py b/frappe/permissions.py index 52f4a66a6ba..bf41b431d3d 100644 --- a/frappe/permissions.py +++ b/frappe/permissions.py @@ -451,7 +451,7 @@ def has_controller_permissions(doc, ptype, user=None, debug=False) -> bool: def get_doctypes_with_read(): - return list({cstr(p.parent) for p in get_valid_perms() if p.parent}) + return list({cstr(p.parent) for p in get_valid_perms() if p.parent and p.read}) def get_valid_perms(doctype=None, user=None): diff --git a/frappe/tests/test_permissions.py b/frappe/tests/test_permissions.py index e63fb59831b..befbfab17cb 100644 --- a/frappe/tests/test_permissions.py +++ b/frappe/tests/test_permissions.py @@ -5,6 +5,7 @@ import frappe import frappe.defaults import frappe.model.meta +from frappe.core.doctype.doctype.test_doctype import new_doctype from frappe.core.doctype.user_permission.user_permission import clear_user_permissions from frappe.core.page.permission_manager.permission_manager import reset, update from frappe.desk.form.load import getdoc @@ -17,6 +18,7 @@ add_user_permission, clear_user_permissions_for_doctype, get_doc_permissions, + get_doctypes_with_read, remove_user_permission, update_permission_property, ) @@ -736,3 +738,10 @@ def assertHasRole(*roles: str | tuple[str, ...]): ) frappe.set_user(system_user) assertHasRole(GUEST_ROLE, ALL_USER_ROLE, SYSTEM_USER_ROLE) + + def test_get_doctypes_with_read(self): + with self.set_user("Administrator"): + doctype = new_doctype(permissions=[{"select": 1, "role": "_Test Role", "read": 0}]).insert().name + + with self.set_user("test@example.com"): + self.assertNotIn(doctype, get_doctypes_with_read())