diff --git a/frappe/website/doctype/web_form/web_form.json b/frappe/website/doctype/web_form/web_form.json
index e6b7632e4d..77786734e7 100644
--- a/frappe/website/doctype/web_form/web_form.json
+++ b/frappe/website/doctype/web_form/web_form.json
@@ -16,6 +16,7 @@
"route_to_success_link",
"allow_edit",
"allow_multiple",
+ "apply_document_permissions",
"show_in_grid",
"allow_delete",
"allow_print",
@@ -346,14 +347,20 @@
"fieldname": "custom_css_section",
"fieldtype": "Section Break",
"label": "Custom CSS"
+ },
+ {
+ "default": "0",
+ "fieldname": "apply_document_permissions",
+ "fieldtype": "Check",
+ "label": "Apply Document Permissions"
}
],
"has_web_view": 1,
"icon": "icon-edit",
"is_published_field": "published",
"links": [],
- "modified": "2019-12-24 14:15:43.497431",
- "modified_by": "faris@erpnext.com",
+ "modified": "2020-06-30 21:49:18.237443",
+ "modified_by": "Administrator",
"module": "Website",
"name": "Web Form",
"owner": "Administrator",
diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py
index a3867f1396..dd9c3fecfd 100644
--- a/frappe/website/doctype/web_form/web_form.py
+++ b/frappe/website/doctype/web_form/web_form.py
@@ -130,7 +130,7 @@ def get_context(context):
if frappe.session.user == "Guest" and frappe.form_dict.name:
frappe.throw(_("You need to be logged in to access this {0}.").format(self.doc_type), frappe.PermissionError)
- if frappe.form_dict.name and not has_web_form_permission(self.doc_type, frappe.form_dict.name):
+ if frappe.form_dict.name and not self.has_web_form_permission(self.doc_type, frappe.form_dict.name):
frappe.throw(_("You don't have the permissions to access this document"), frappe.PermissionError)
self.reset_field_parent()
@@ -343,6 +343,27 @@ def get_context(context):
frappe.throw(_('Mandatory Information missing:') + '
'
+ '
'.join(['{0} ({1})'.format(d.label, d.fieldtype) for d in missing]))
+ def has_web_form_permission(self, doctype, name, ptype='read'):
+ if frappe.session.user=="Guest":
+ return False
+
+ if self.apply_document_permissions:
+ return frappe.get_doc(doctype, name).has_permission()
+
+ # owner matches
+ elif frappe.db.get_value(doctype, name, "owner")==frappe.session.user:
+ return True
+
+ elif frappe.has_website_permission(name, ptype=ptype, doctype=doctype):
+ return True
+
+ elif check_webform_perm(doctype, name):
+ return True
+
+ else:
+ return False
+
+
@frappe.whitelist(allow_guest=True)
def accept(web_form, data, docname=None, for_payment=False):
@@ -391,7 +412,7 @@ def accept(web_form, data, docname=None, for_payment=False):
doc.run_method('validate_payment')
if doc.name:
- if has_web_form_permission(doc.doctype, doc.name, "write"):
+ if web_form.has_web_form_permission(doc.doctype, doc.name, "write"):
doc.save(ignore_permissions=True)
else:
# only if permissions are present
@@ -478,24 +499,6 @@ def delete_multiple(web_form_name, docnames):
raise frappe.PermissionError("You do not have permisssion to delete " + ", ".join(restricted_docnames))
-def has_web_form_permission(doctype, name, ptype='read'):
- if frappe.session.user=="Guest":
- return False
-
- # owner matches
- elif frappe.db.get_value(doctype, name, "owner")==frappe.session.user:
- return True
-
- elif frappe.has_website_permission(name, ptype=ptype, doctype=doctype):
- return True
-
- elif check_webform_perm(doctype, name):
- return True
-
- else:
- return False
-
-
def check_webform_perm(doctype, name):
doc = frappe.get_doc(doctype, name)
if hasattr(doc, "has_webform_permission"):
@@ -532,7 +535,7 @@ def get_form_data(doctype, docname=None, web_form_name=None):
if docname:
doc = frappe.get_doc(doctype, docname)
- if has_web_form_permission(doctype, docname, ptype='read'):
+ if web_form.has_web_form_permission(doctype, docname, ptype='read'):
out.doc = doc
else:
frappe.throw(_("Not permitted"), frappe.PermissionError)