Browse Source

Merge pull request #17936 from frappe/mergify/bp/version-14-hotfix/pr-17884

fix: permissions dont refresh when switching doc (backport #17884)
version-14
Ankush Menat 2 years ago
committed by GitHub
parent
commit
9de12a0cee
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 26 additions and 15 deletions
  1. +8
    -0
      frappe/public/js/frappe/form/controls/base_control.js
  2. +0
    -1
      frappe/public/js/frappe/form/controls/table.js
  3. +10
    -3
      frappe/public/js/frappe/form/form.js
  4. +8
    -0
      frappe/public/js/frappe/form/grid.js
  5. +0
    -11
      frappe/public/js/frappe/form/layout.js

+ 8
- 0
frappe/public/js/frappe/form/controls/base_control.js View File

@@ -33,6 +33,14 @@ frappe.ui.form.Control = class BaseControl {
this.refresh();
}

get perm() {
return this.frm?.perm;
}

set perm(_perm) {
console.error("Setting perm on controls isn't supported, update form's perm instead");
}

// returns "Read", "Write" or "None"
// as strings based on permissions
get_status(explain) {


+ 0
- 1
frappe/public/js/frappe/form/controls/table.js View File

@@ -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,
});


+ 10
- 3
frappe/public/js/frappe/form/form.js View File

@@ -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;
}


+ 8
- 0
frappe/public/js/frappe/form/grid.js View File

@@ -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;


+ 0
- 11
frappe/public/js/frappe/form/layout.js View File

@@ -191,9 +191,6 @@ frappe.ui.form.Layout = class Layout {
this.fields_dict[fieldname].$wrapper.remove();
this.fields_list.splice(this.fields_dict[fieldname], 1, fieldobj);
this.fields_dict[fieldname] = fieldobj;
if (this.frm) {
fieldobj.perm = this.frm.perm;
}
this.section.fields_list.splice(this.section.fields_dict[fieldname], 1, fieldobj);
this.section.fields_dict[fieldname] = fieldobj;
this.refresh_fields([df]);
@@ -207,9 +204,6 @@ frappe.ui.form.Layout = class Layout {
const fieldobj = this.init_field(df, render);
this.fields_list.push(fieldobj);
this.fields_dict[df.fieldname] = fieldobj;
if (this.frm) {
fieldobj.perm = this.frm.perm;
}

this.section.fields_list.push(fieldobj);
this.section.fields_dict[df.fieldname] = fieldobj;
@@ -439,11 +433,6 @@ frappe.ui.form.Layout = class Layout {
fieldobj.df =
frappe.meta.get_docfield(me.doc.doctype, fieldobj.df.fieldname, me.doc.name) ||
fieldobj.df;

// on form change, permissions can change
if (me.frm) {
fieldobj.perm = me.frm.perm;
}
}
refresh && fieldobj.df && fieldobj.refresh && fieldobj.refresh();
}


Loading…
Cancel
Save