diff --git a/frappe/core/doctype/custom_role/custom_role.py b/frappe/core/doctype/custom_role/custom_role.py index 238b605551..2e183bc205 100644 --- a/frappe/core/doctype/custom_role/custom_role.py +++ b/frappe/core/doctype/custom_role/custom_role.py @@ -8,3 +8,12 @@ from frappe.model.document import Document class CustomRole(Document): pass + +def get_custom_allowed_roles(field, name): + allowed_roles = [] + custom_role = frappe.db.get_value('Custom Role', {field: name}, 'name') + if custom_role: + custom_role_doc = frappe.get_doc('Custom Role', custom_role) + allowed_roles = [d.role for d in custom_role_doc.roles] + + return allowed_roles \ No newline at end of file diff --git a/frappe/core/doctype/page/page.py b/frappe/core/doctype/page/page.py index 5576a80a08..720ff563a8 100644 --- a/frappe/core/doctype/page/page.py +++ b/frappe/core/doctype/page/page.py @@ -9,6 +9,7 @@ from frappe.build import html_to_js_template from frappe.model.utils import render_include from frappe import conf, _ from frappe.desk.form.meta import get_code_files_via_hooks, get_js +from frappe.core.doctype.custom_role.custom_role import get_custom_allowed_roles class Page(Document): def autoname(self): @@ -81,6 +82,9 @@ class Page(Document): allowed = [d.role for d in frappe.get_all("Has Role", fields=["role"], filters={"parent": self.name})] + custom_roles = get_custom_allowed_roles('page', self.name) + allowed.extend(custom_roles) + if not allowed: return True diff --git a/frappe/core/doctype/report/report.py b/frappe/core/doctype/report/report.py index 2ed15b4c79..92289648a6 100644 --- a/frappe/core/doctype/report/report.py +++ b/frappe/core/doctype/report/report.py @@ -11,6 +11,7 @@ from frappe.model.document import Document from frappe.modules.export_file import export_to_files from frappe.modules import make_boilerplate from frappe.core.doctype.page.page import delete_custom_role +from frappe.core.doctype.custom_role.custom_role import get_custom_allowed_roles class Report(Document): def validate(self): @@ -58,10 +59,8 @@ class Report(Document): allowed = [d.role for d in frappe.get_all("Has Role", fields=["role"], filters={"parent": self.name})] - custom_role = frappe.db.get_value('Custom Role', {'report': self.name}, 'name') - if custom_role: - custom_role_doc = frappe.get_doc('Custom Role', custom_role) - allowed.extend([d.role for d in custom_role_doc.roles]) + custom_roles = get_custom_allowed_roles('report', self.name) + allowed.extend(custom_roles) if not allowed: return True