diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index 345be99a63..092f7fa45d 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -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} ) diff --git a/frappe/share.py b/frappe/share.py index b142a5060e..e54adc5493 100644 --- a/frappe/share.py +++ b/frappe/share.py @@ -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)