Skip to content

Commit

Permalink
fix: filter select perm in get_doctypes_with_read
Browse files Browse the repository at this point in the history
closes #26015

Extracted from #26018

(cherry picked from commit a1bb734)

# Conflicts:
#	frappe/tests/test_permissions.py
  • Loading branch information
ankush authored and mergify[bot] committed Apr 18, 2024
1 parent 3217204 commit 5e2be4b
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
2 changes: 1 addition & 1 deletion frappe/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ def has_controller_permissions(doc, ptype, user=None):


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):
Expand Down
37 changes: 37 additions & 0 deletions frappe/tests/test_permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -13,6 +14,7 @@
add_user_permission,
clear_user_permissions_for_doctype,
get_doc_permissions,
get_doctypes_with_read,
remove_user_permission,
update_permission_property,
)
Expand Down Expand Up @@ -709,3 +711,38 @@ def test_select_user(self):
self.assertNotIn("test1@example.com", users)
self.assertIn("test2@example.com", users)
self.assertIn("test3@example.com", users)
<<<<<<< HEAD
=======

def test_automatic_permissions(self):
def assertHasRole(*roles: str | tuple[str, ...]):
for role in roles:
self.assertIn(role, frappe.get_roles())

frappe.set_user("Administrator")
assertHasRole(*AUTOMATIC_ROLES)

frappe.set_user("Guest")
assertHasRole(GUEST_ROLE)

website_user = frappe.db.get_value(
"User",
{"user_type": "Website User", "enabled": 1, "name": ("not in", AUTOMATIC_ROLES)},
)
frappe.set_user(website_user)
assertHasRole(GUEST_ROLE, ALL_USER_ROLE)

system_user = frappe.db.get_value(
"User",
{"user_type": "System User", "enabled": 1, "name": ("not in", AUTOMATIC_ROLES)},
)
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())
>>>>>>> a1bb734079 (fix: filter select perm in get_doctypes_with_read)

0 comments on commit 5e2be4b

Please sign in to comment.