Merge pull request #35148 from akhilnarang/get-lazy-doc-check-permission
feat(get_lazy_doc): add `check_permission` parameter
This commit is contained in:
commit
461bb22a68
7 changed files with 21 additions and 29 deletions
|
|
@ -365,8 +365,7 @@ def attach_file(
|
|||
:param is_private: Attach file as private file (1 or 0)
|
||||
:param docfield: file to attach to (optional)"""
|
||||
|
||||
doc = frappe.get_lazy_doc(doctype, docname)
|
||||
doc.check_permission()
|
||||
doc = frappe.get_lazy_doc(doctype, docname, check_permission=True)
|
||||
|
||||
file = frappe.get_doc(
|
||||
{
|
||||
|
|
|
|||
|
|
@ -94,8 +94,7 @@ def get_docinfo(doc=None, doctype=None, name=None):
|
|||
from frappe.share import _get_users as get_docshares
|
||||
|
||||
if not doc:
|
||||
doc = frappe.get_lazy_doc(doctype, name)
|
||||
doc.check_permission("read")
|
||||
doc = frappe.get_lazy_doc(doctype, name, check_permission=True)
|
||||
|
||||
all_communications = _get_communications(doc.doctype, doc.name, limit=21)
|
||||
automated_messages = [
|
||||
|
|
@ -204,8 +203,7 @@ def get_versions(doc: "Document") -> list[dict]:
|
|||
def get_communications(doctype, name, start=0, limit=20):
|
||||
from frappe.utils import cint
|
||||
|
||||
doc = frappe.get_lazy_doc(doctype, name)
|
||||
doc.check_permission("read")
|
||||
frappe.get_lazy_doc(doctype, name).check_permission()
|
||||
|
||||
return _get_communications(doctype, name, cint(start), cint(limit))
|
||||
|
||||
|
|
|
|||
|
|
@ -27,8 +27,7 @@ def add_comment(
|
|||
reference_doctype: str, reference_name: str, content: str, comment_email: str, comment_by: str
|
||||
) -> "Comment":
|
||||
"""Allow logged user with permission to read document to add a comment"""
|
||||
reference_doc = frappe.get_lazy_doc(reference_doctype, reference_name)
|
||||
reference_doc.check_permission()
|
||||
reference_doc = frappe.get_lazy_doc(reference_doctype, reference_name, check_permission=True)
|
||||
|
||||
comment = frappe.new_doc("Comment")
|
||||
comment.update(
|
||||
|
|
@ -58,8 +57,7 @@ def update_comment(name, content):
|
|||
frappe.throw(_("Comment can only be edited by the owner"), frappe.PermissionError)
|
||||
|
||||
if doc.reference_doctype and doc.reference_name:
|
||||
reference_doc = frappe.get_lazy_doc(doc.reference_doctype, doc.reference_name)
|
||||
reference_doc.check_permission()
|
||||
reference_doc = frappe.get_lazy_doc(doc.reference_doctype, doc.reference_name, check_permission=True)
|
||||
|
||||
doc.content = extract_images_from_html(reference_doc, content, is_private=True)
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -264,8 +264,7 @@ def get_open_count(doctype: str, name: str, items=None):
|
|||
|
||||
|
||||
def _get_linked_document_counts(doctype: str, name: str, items=None):
|
||||
doc = frappe.get_lazy_doc(doctype, name)
|
||||
doc.check_permission()
|
||||
doc = frappe.get_lazy_doc(doctype, name, check_permission=True)
|
||||
meta = doc.meta
|
||||
links = meta.get_dashboard_data()
|
||||
|
||||
|
|
|
|||
|
|
@ -211,15 +211,13 @@ def check_write_permission(doctype: str | None = None, name: str | None = None):
|
|||
return
|
||||
|
||||
try:
|
||||
doc = frappe.get_lazy_doc(doctype, name)
|
||||
frappe.get_lazy_doc(doctype, name, check_permission="write")
|
||||
except frappe.DoesNotExistError:
|
||||
# doc has not been inserted yet, name is set to "new-some-doctype"
|
||||
# If doc inserts fine then only this attachment will be linked see file/utils.py:relink_mismatched_files
|
||||
frappe.new_doc(doctype).check_permission("write")
|
||||
return
|
||||
|
||||
doc.check_permission("write")
|
||||
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
def download_file(file_url: str):
|
||||
|
|
|
|||
|
|
@ -59,7 +59,9 @@ def get_doc(doctype: str, /) -> _SingleDocument:
|
|||
|
||||
|
||||
@overload
|
||||
def get_doc(doctype: str, name: str, /, *, for_update: bool | None = None) -> "Document":
|
||||
def get_doc(
|
||||
doctype: str, name: str, /, *, for_update: bool | None = None, check_permission: str | bool | None = None
|
||||
) -> "Document":
|
||||
"""Retrieve DocType from DB, doctype and name must be positional argument."""
|
||||
pass
|
||||
|
||||
|
|
@ -142,14 +144,16 @@ def get_doc_from_dict(data: dict[str, Any], **kwargs) -> "Document":
|
|||
raise ImportError(data["doctype"])
|
||||
|
||||
|
||||
def get_lazy_doc(doctype: str, name: str, *, for_update=None) -> "Document":
|
||||
def get_lazy_doc(
|
||||
doctype: str, name: str, *, for_update=None, check_permission: str | bool | None = None
|
||||
) -> "Document":
|
||||
if doctype == "DocType":
|
||||
warnings.warn("DocType doesn't support lazy loading", stacklevel=1)
|
||||
return get_doc(doctype, name)
|
||||
return get_doc(doctype, name, check_permission=check_permission)
|
||||
|
||||
controller = get_lazy_controller(doctype)
|
||||
if controller:
|
||||
return controller(doctype, name, for_update=for_update)
|
||||
if controller := get_lazy_controller(doctype):
|
||||
doc = controller(doctype, name, for_update=for_update)
|
||||
return get_doc_permission_check(doc, check_permission)
|
||||
raise ImportError(doctype)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -340,11 +340,9 @@ def get_html_and_style(
|
|||
"""Return `html` and `style` of print format, used in PDF etc."""
|
||||
|
||||
if isinstance(name, str):
|
||||
document = frappe.get_lazy_doc(doc, name)
|
||||
document = frappe.get_lazy_doc(doc, name, check_permission=True)
|
||||
else:
|
||||
document = frappe.get_doc(json.loads(doc))
|
||||
|
||||
document.check_permission()
|
||||
document = frappe.get_doc(json.loads(doc), check_permission=True)
|
||||
|
||||
print_format = get_print_format_doc(print_format, meta=document.meta)
|
||||
set_link_titles(document)
|
||||
|
|
@ -371,11 +369,9 @@ def get_rendered_raw_commands(doc: str, name: str | None = None, print_format: s
|
|||
"""Return Rendered Raw Commands of print format, used to send directly to printer."""
|
||||
|
||||
if isinstance(name, str):
|
||||
document = frappe.get_lazy_doc(doc, name)
|
||||
document = frappe.get_lazy_doc(doc, name, check_permission=True)
|
||||
else:
|
||||
document = frappe.get_doc(json.loads(doc))
|
||||
|
||||
document.check_permission()
|
||||
document = frappe.get_doc(json.loads(doc), check_permission=True)
|
||||
|
||||
print_format = get_print_format_doc(print_format, meta=document.meta)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue