fix: add flags to set_permission for docshares (#18416)
* add flags to set_permission for docshares * refactor: don't expose flags to client side * fix add_docshare * style: black formatting [skip ci] Co-authored-by: Leonard Goertz <leonard.goertz@noventive.com> Co-authored-by: Ankush Menat <ankush@frappe.io>
This commit is contained in:
parent
94398aab0e
commit
cfbab92249
2 changed files with 27 additions and 4 deletions
|
|
@ -237,7 +237,7 @@ class User(Document):
|
|||
)
|
||||
|
||||
def share_with_self(self):
|
||||
frappe.share.add(
|
||||
frappe.share.add_docshare(
|
||||
self.doctype, self.name, self.name, write=1, share=1, flags={"ignore_share_permission": True}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,22 @@ from frappe.utils import cint
|
|||
|
||||
|
||||
@frappe.whitelist()
|
||||
def add(
|
||||
def add(doctype, name, user=None, read=1, write=0, submit=0, share=0, everyone=0, notify=0):
|
||||
"""Expose function without flags to the client-side"""
|
||||
return add_docshare(
|
||||
doctype,
|
||||
name,
|
||||
user=user,
|
||||
read=read,
|
||||
write=write,
|
||||
submit=submit,
|
||||
share=share,
|
||||
everyone=everyone,
|
||||
notify=notify,
|
||||
)
|
||||
|
||||
|
||||
def add_docshare(
|
||||
doctype, name, user=None, read=1, write=0, submit=0, share=0, everyone=0, flags=None, notify=0
|
||||
):
|
||||
"""Share the given document with a user."""
|
||||
|
|
@ -66,21 +81,29 @@ def remove(doctype, name, user, flags=None):
|
|||
|
||||
@frappe.whitelist()
|
||||
def set_permission(doctype, name, user, permission_to, value=1, everyone=0):
|
||||
"""Expose function without flags to the client-side"""
|
||||
set_docshare_permission(doctype, name, user, permission_to, value=value, everyone=everyone)
|
||||
|
||||
|
||||
def set_docshare_permission(doctype, name, user, permission_to, value=1, everyone=0, flags=None):
|
||||
"""Set share permission."""
|
||||
check_share_permission(doctype, name)
|
||||
if not (flags or {}).get("ignore_share_permission"):
|
||||
check_share_permission(doctype, name)
|
||||
|
||||
share_name = get_share_name(doctype, name, user, everyone)
|
||||
value = int(value)
|
||||
|
||||
if not share_name:
|
||||
if value:
|
||||
share = add(doctype, name, user, everyone=everyone, **{permission_to: 1})
|
||||
share = add_docshare(doctype, name, user, everyone=everyone, **{permission_to: 1}, flags=flags)
|
||||
else:
|
||||
# no share found, nothing to remove
|
||||
share = {}
|
||||
pass
|
||||
else:
|
||||
share = frappe.get_doc("DocShare", share_name)
|
||||
if flags:
|
||||
share.flags.update(flags)
|
||||
share.flags.ignore_permissions = True
|
||||
share.set(permission_to, value)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue