Просмотр исходного кода

fix: add flags to set_permission for docshares (#18416) (#18429)

* 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>
(cherry picked from commit cfbab92249)

Co-authored-by: Leonard Goertz <49870752+uepselon@users.noreply.github.com>
version-14
mergify[bot] 2 лет назад
committed by GitHub
Родитель
Сommit
a2ba0aac19
Не найден GPG ключ соответствующий данной подписи Идентификатор GPG ключа: 4AEE18F83AFDEB23
2 измененных файлов: 27 добавлений и 4 удалений
  1. +1
    -1
      frappe/core/doctype/user/user.py
  2. +26
    -3
      frappe/share.py

+ 1
- 1
frappe/core/doctype/user/user.py Просмотреть файл

@@ -237,7 +237,7 @@ class User(Document):
) )


def share_with_self(self): 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} self.doctype, self.name, self.name, write=1, share=1, flags={"ignore_share_permission": True}
) )




+ 26
- 3
frappe/share.py Просмотреть файл

@@ -13,7 +13,22 @@ from frappe.utils import cint




@frappe.whitelist() @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 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.""" """Share the given document with a user."""
@@ -66,21 +81,29 @@ def remove(doctype, name, user, flags=None):


@frappe.whitelist() @frappe.whitelist()
def set_permission(doctype, name, user, permission_to, value=1, everyone=0): 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.""" """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) share_name = get_share_name(doctype, name, user, everyone)
value = int(value) value = int(value)


if not share_name: if not share_name:
if value: 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: else:
# no share found, nothing to remove # no share found, nothing to remove
share = {} share = {}
pass pass
else: else:
share = frappe.get_doc("DocShare", share_name) share = frappe.get_doc("DocShare", share_name)
if flags:
share.flags.update(flags)
share.flags.ignore_permissions = True share.flags.ignore_permissions = True
share.set(permission_to, value) share.set(permission_to, value)




Загрузка…
Отмена
Сохранить