From 8d915701ad252fa0af7bb569f49cc4f40dd45946 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 11 Jul 2016 14:56:54 +0530 Subject: [PATCH 1/2] Allow non-admin users to delete custom doctypes --- frappe/core/doctype/doctype/doctype.json | 6 +++--- frappe/model/delete_doc.py | 23 +++++++++++++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/frappe/core/doctype/doctype/doctype.json b/frappe/core/doctype/doctype/doctype.json index 1aad28e920..9a3949ef39 100644 --- a/frappe/core/doctype/doctype/doctype.json +++ b/frappe/core/doctype/doctype/doctype.json @@ -1153,7 +1153,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-07-08 04:38:09.088871", + "modified": "2016-07-11 14:24:21.223885", "modified_by": "Administrator", "module": "Core", "name": "DocType", @@ -1164,7 +1164,7 @@ "apply_user_permissions": 0, "cancel": 0, "create": 1, - "delete": 0, + "delete": 1, "email": 1, "export": 0, "if_owner": 0, @@ -1200,7 +1200,7 @@ "write": 1 } ], - "quick_entry": 1, + "quick_entry": 0, "read_only": 0, "read_only_onload": 0, "search_fields": "module", diff --git a/frappe/model/delete_doc.py b/frappe/model/delete_doc.py index eb491208b1..c1e6b8cf91 100644 --- a/frappe/model/delete_doc.py +++ b/frappe/model/delete_doc.py @@ -52,6 +52,11 @@ def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reloa doc.run_method("before_reload") else: + doc = frappe.get_doc(doctype, name) + + update_flags(doc, flags, ignore_permissions) + check_permission_and_not_submitted(doc) + frappe.db.sql("delete from `tabCustom Field` where dt = %s", name) frappe.db.sql("delete from `tabCustom Script` where dt = %s", name) frappe.db.sql("delete from `tabProperty Setter` where doc_type = %s", name) @@ -63,13 +68,7 @@ def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reloa doc = frappe.get_doc(doctype, name) if not for_reload: - if ignore_permissions: - if not flags: flags = {} - flags["ignore_permissions"] = ignore_permissions - - if flags: - doc.flags.update(flags) - + update_flags(doc, flags, ignore_permissions) check_permission_and_not_submitted(doc) if not ignore_on_trash: @@ -140,10 +139,18 @@ def delete_from_table(doctype, name, ignore_doctypes, doc): for t in list(set(tables)): if t not in ignore_doctypes: frappe.db.sql("delete from `tab%s` where parenttype=%s and parent = %s" % (t, '%s', '%s'), (doctype, name)) + +def update_flags(doc, flags=None, ignore_permissions=False): + if ignore_permissions: + if not flags: flags = {} + flags["ignore_permissions"] = ignore_permissions + + if flags: + doc.flags.update(flags) def check_permission_and_not_submitted(doc): # permission - if not doc.flags.ignore_permissions and frappe.session.user!="Administrator" and not doc.has_permission("delete"): + if not doc.flags.ignore_permissions and frappe.session.user!="Administrator" and (not doc.has_permission("delete") or (doc.doctype=="DocType" and not doc.custom)): frappe.msgprint(_("User not allowed to delete {0}: {1}").format(doc.doctype, doc.name), raise_exception=True) # check if submitted From a026b7f884f7f27c5a71e317766d5e00ff46146a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 11 Jul 2016 15:03:20 +0530 Subject: [PATCH 2/2] Reload permissions for DocType --- frappe/patches.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/patches.txt b/frappe/patches.txt index 00053673aa..060c9fa72e 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -1,7 +1,7 @@ execute:frappe.db.sql("""update `tabPatch Log` set patch=replace(patch, '.4_0.', '.v4_0.')""") #2014-05-12 frappe.patches.v5_0.convert_to_barracuda_and_utf8mb4 frappe.patches.v6_1.rename_file_data -execute:frappe.reload_doc('core', 'doctype', 'doctype', force=True) #2016-07-08 +execute:frappe.reload_doc('core', 'doctype', 'doctype', force=True) #2016-07-11 execute:frappe.reload_doc('core', 'doctype', 'docfield', force=True) #2016-02-26 execute:frappe.reload_doc('core', 'doctype', 'docperm') #2014-06-24 execute:frappe.reload_doc('custom', 'doctype', 'custom_field') #2015-10-19