feat: extend perm debugging to popular controllers
- [x] File - [x] Communication
This commit is contained in:
parent
3a8fc90961
commit
914406d31b
6 changed files with 13 additions and 10 deletions
|
|
@ -975,6 +975,7 @@ def has_permission(
|
|||
throw=False,
|
||||
*,
|
||||
parent_doctype=None,
|
||||
debug=False,
|
||||
):
|
||||
"""
|
||||
Return True if the user has permission `ptype` for given `doctype` or `doc`.
|
||||
|
|
@ -999,6 +1000,7 @@ def has_permission(
|
|||
user=user,
|
||||
raise_exception=throw,
|
||||
parent_doctype=parent_doctype,
|
||||
debug=debug,
|
||||
)
|
||||
|
||||
if throw and not out:
|
||||
|
|
|
|||
|
|
@ -501,14 +501,15 @@ def on_doctype_update():
|
|||
frappe.db.add_index("Communication", ["message_id(140)"])
|
||||
|
||||
|
||||
def has_permission(doc, ptype, user):
|
||||
def has_permission(doc, ptype, user=None, debug=False):
|
||||
if ptype == "read":
|
||||
if doc.reference_doctype == "Communication" and doc.reference_name == doc.name:
|
||||
return
|
||||
|
||||
if doc.reference_doctype and doc.reference_name:
|
||||
if frappe.has_permission(doc.reference_doctype, ptype="read", doc=doc.reference_name):
|
||||
return True
|
||||
return frappe.has_permission(
|
||||
doc.reference_doctype, ptype="read", doc=doc.reference_name, user=user, debug=debug
|
||||
)
|
||||
|
||||
|
||||
def get_permission_query_conditions_for_communication(user):
|
||||
|
|
|
|||
|
|
@ -778,11 +778,11 @@ def on_doctype_update():
|
|||
frappe.db.add_index("File", ["attached_to_doctype", "attached_to_name"])
|
||||
|
||||
|
||||
def has_permission(doc, ptype=None, user=None):
|
||||
def has_permission(doc, ptype=None, user=None, debug=False):
|
||||
user = user or frappe.session.user
|
||||
|
||||
if ptype == "create":
|
||||
return frappe.has_permission("File", "create", user=user)
|
||||
return frappe.has_permission("File", "create", user=user, debug=debug)
|
||||
|
||||
if not doc.is_private or (user != "Guest" and doc.owner == user) or user == "Administrator":
|
||||
return True
|
||||
|
|
@ -798,9 +798,9 @@ def has_permission(doc, ptype=None, user=None):
|
|||
return False
|
||||
|
||||
if ptype in ["write", "create", "delete"]:
|
||||
return ref_doc.has_permission("write")
|
||||
return ref_doc.has_permission("write", debug=debug, user=user)
|
||||
else:
|
||||
return ref_doc.has_permission("read")
|
||||
return ref_doc.has_permission("read", debug=debug, user=user)
|
||||
|
||||
return False
|
||||
|
||||
|
|
|
|||
|
|
@ -214,7 +214,7 @@ class Document(BaseDocument):
|
|||
if not self.has_permission(permtype):
|
||||
self.raise_no_permission_to(permtype)
|
||||
|
||||
def has_permission(self, permtype="read") -> bool:
|
||||
def has_permission(self, permtype="read", *, debug=False, user=None) -> bool:
|
||||
"""
|
||||
Call `frappe.permissions.has_permission` if `ignore_permissions` flag isn't truthy
|
||||
|
||||
|
|
@ -226,7 +226,7 @@ class Document(BaseDocument):
|
|||
|
||||
import frappe.permissions
|
||||
|
||||
return frappe.permissions.has_permission(self.doctype, permtype, self)
|
||||
return frappe.permissions.has_permission(self.doctype, permtype, self, debug=debug, user=user)
|
||||
|
||||
def raise_no_permission_to(self, perm_type):
|
||||
"""Raise `frappe.PermissionError`."""
|
||||
|
|
|
|||
|
|
@ -447,7 +447,7 @@ def has_controller_permissions(doc, ptype, user=None, debug=False):
|
|||
return None
|
||||
|
||||
for method in reversed(methods):
|
||||
controller_permission = frappe.call(frappe.get_attr(method), doc=doc, ptype=ptype, user=user)
|
||||
controller_permission = frappe.call(method, doc=doc, ptype=ptype, user=user, debug=debug)
|
||||
debug and _debug_log(f"Controller permission check from {method}: {controller_permission}")
|
||||
if controller_permission is not None:
|
||||
return controller_permission
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue