diff --git a/frappe/public/js/frappe/form/controls/table.js b/frappe/public/js/frappe/form/controls/table.js index 39aba3a234..777705634c 100644 --- a/frappe/public/js/frappe/form/controls/table.js +++ b/frappe/public/js/frappe/form/controls/table.js @@ -8,7 +8,6 @@ frappe.ui.form.ControlTable = class ControlTable extends frappe.ui.form.Control this.grid = new Grid({ frm: this.frm, df: this.df, - perm: this.perm || (this.frm && this.frm.perm) || this.df.perm, parent: this.wrapper, control: this, }); diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 77eacf6964..d8e5c3497a 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -393,11 +393,17 @@ frappe.ui.form.Form = class FrappeForm { this.doc = frappe.get_doc(this.doctype, this.docname); // check permissions + this.fetch_permissions(); if (!this.has_read_permission()) { frappe.show_not_permitted(__(this.doctype) + " " + __(cstr(this.docname))); return; } + // update grids with new permissions + this.grids.forEach((table) => { + table.grid.refresh(); + }); + // read only (workflow) this.read_only = frappe.workflow.is_read_only(this.doctype, this.docname); if (this.read_only) this.set_read_only(true); @@ -1147,11 +1153,12 @@ frappe.ui.form.Form = class FrappeForm { .attr("target", "_blank"); } - has_read_permission() { - // get perm - var dt = this.parent_doctype ? this.parent_doctype : this.doctype; + fetch_permissions() { + let dt = this.parent_doctype ? this.parent_doctype : this.doctype; this.perm = frappe.perm.get_perm(dt, this.doc); + } + has_read_permission() { if (!this.perm[0].read) { return 0; } diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index fa582a848f..02646a6687 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -43,6 +43,14 @@ export default class Grid { this.debounced_refresh = frappe.utils.debounce(this.debounced_refresh, 100); } + get perm() { + return this.control?.perm || this.frm?.perm || this.df.perm; + } + + set perm(_perm) { + console.error("Setting perm on grid isn't supported, update form's perm instead"); + } + allow_on_grid_editing() { if (frappe.utils.is_xs()) { return false;