[Enhance] Role permission for page and report, added reset roles button
This commit is contained in:
parent
cc8df1c4cd
commit
da424049a1
6 changed files with 91 additions and 89 deletions
|
|
@ -121,13 +121,13 @@ def get_user_page_or_report(parent):
|
|||
|
||||
has_role[p.name] = {"modified":p.modified, "title": p.title}
|
||||
|
||||
# pages or reports where role is not set are also allowed
|
||||
for p in frappe.db.sql("""select name, modified, {field} as title
|
||||
from `tab{parent}` where
|
||||
(select count(*) from `tabHas Role`
|
||||
where `tabHas Role`.parent=tab{parent}.name) = 0""".format(parent=parent, field=field), as_dict=1):
|
||||
# pages or reports where role is not set are also allowed
|
||||
for p in frappe.db.sql("""select name, modified, {field} as title
|
||||
from `tab{parent}` where
|
||||
(select count(*) from `tabHas Role`
|
||||
where `tabHas Role`.parent=tab{parent}.name) = 0""".format(parent=parent, field=field), as_dict=1):
|
||||
|
||||
has_role[p.name] = {"modified":p.modified, "title": p.title}
|
||||
has_role[p.name] = {"modified":p.modified, "title": p.title}
|
||||
|
||||
return has_role
|
||||
|
||||
|
|
|
|||
|
|
@ -5,16 +5,30 @@ frappe.ui.form.on('Role Permission for Page and Report', {
|
|||
refresh: function(frm) {
|
||||
frm.disable_save();
|
||||
frm.role_area.hide();
|
||||
frm.add_custom_button(__("Reset to defaults"),
|
||||
function(){ frm.trigger("reset_roles") });
|
||||
frm.add_custom_button(__("Update"),
|
||||
function(){ frm.trigger("update_roles") }).addClass('btn-primary');
|
||||
},
|
||||
|
||||
onload: function(frm) {
|
||||
if(!frm.roles_editor) {
|
||||
frm.role_area = $('<div style="min-height: 300px">')
|
||||
.appendTo(frm.fields_dict.roles_html.wrapper);
|
||||
frm.roles_editor = new frappe.RoleEditor(frm.role_area);
|
||||
frm.roles_editor = new frappe.RoleEditor(frm.role_area, frm);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
set_role_for: function(frm) {
|
||||
frm.trigger("clear_fields")
|
||||
frm.toggle_display('roles_html', false)
|
||||
},
|
||||
|
||||
clear_fields: function(frm) {
|
||||
field = (frm.doc.set_role_for == 'Report') ? 'page' : 'report';
|
||||
frm.set_value(field, '')
|
||||
},
|
||||
|
||||
page: function(frm) {
|
||||
frm.trigger("get_roles")
|
||||
},
|
||||
|
|
@ -24,9 +38,10 @@ frappe.ui.form.on('Role Permission for Page and Report', {
|
|||
},
|
||||
|
||||
get_roles: function(frm) {
|
||||
frm.toggle_display('roles_html', true)
|
||||
frm.role_area.show();
|
||||
|
||||
return frappe.call({
|
||||
return frm.call({
|
||||
method:"get_custom_roles",
|
||||
doc: frm.doc,
|
||||
callback: function(r) {
|
||||
|
|
@ -36,20 +51,43 @@ frappe.ui.form.on('Role Permission for Page and Report', {
|
|||
})
|
||||
},
|
||||
|
||||
update: function(frm) {
|
||||
update_roles: function(frm) {
|
||||
frm.trigger("validate_mandatory_fields")
|
||||
if(frm.roles_editor) {
|
||||
frm.roles_editor.set_roles_in_table()
|
||||
}
|
||||
|
||||
return frappe.call({
|
||||
return frm.call({
|
||||
method:"set_custom_roles",
|
||||
doc: frm.doc,
|
||||
callback: function(r) {
|
||||
refresh_field('roles')
|
||||
frm.roles_editor.show()
|
||||
frappe.msgprint(__("Successfully Updated"))
|
||||
frm.reload_doc()
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
reset_roles: function(frm) {
|
||||
frm.trigger("validate_mandatory_fields")
|
||||
return frm.call({
|
||||
method:"reset_roles",
|
||||
doc: frm.doc,
|
||||
callback: function(r) {
|
||||
refresh_field('roles')
|
||||
frm.roles_editor.show()
|
||||
frappe.msgprint(__("Successfully Updated"))
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
validate_mandatory_fields: function(frm) {
|
||||
if(!frm.doc.set_role_for){
|
||||
frappe.throw(__("Mandatory field: set role for"))
|
||||
}
|
||||
|
||||
if(frm.doc.set_role_for && !frm.doc[frm.doc.set_role_for.toLocaleLowerCase()]) {
|
||||
frappe.throw(__("Mandatory field: {0}", [frm.doc.set_role_for]))
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"allow_copy": 1,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"beta": 0,
|
||||
|
|
@ -36,7 +37,7 @@
|
|||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
|
|
@ -191,77 +192,19 @@
|
|||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "section_break_8",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "update",
|
||||
"fieldtype": "Button",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Update",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 1,
|
||||
"idx": 0,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 1,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-03-02 16:06:16.295111",
|
||||
"modified": "2017-03-11 02:35:32.369043",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"name": "Role Permission for Page and Report",
|
||||
|
|
|
|||
|
|
@ -14,12 +14,22 @@ class RolePermissionforPageandReport(Document):
|
|||
name = frappe.db.get_value('Custom Role', args, "name")
|
||||
if name:
|
||||
doc = frappe.get_doc('Custom Role', name)
|
||||
roles = doc.roles
|
||||
else:
|
||||
doctype = self.set_role_for
|
||||
docname = self.page if self.set_role_for == 'Page' else self.report
|
||||
doc = frappe.get_doc(doctype, docname)
|
||||
roles = self.get_standard_roles()
|
||||
|
||||
self.set('roles', doc.roles)
|
||||
self.set('roles', roles)
|
||||
|
||||
def get_standard_roles(self):
|
||||
doctype = self.set_role_for
|
||||
docname = self.page if self.set_role_for == 'Page' else self.report
|
||||
doc = frappe.get_doc(doctype, docname)
|
||||
return doc.roles
|
||||
|
||||
def reset_roles(self):
|
||||
roles = self.get_standard_roles()
|
||||
self.set('roles', roles)
|
||||
self.set_custom_roles()
|
||||
|
||||
def set_custom_roles(self):
|
||||
args = self.get_args()
|
||||
|
|
@ -27,13 +37,13 @@ class RolePermissionforPageandReport(Document):
|
|||
|
||||
args.update({
|
||||
'doctype': 'Custom Role',
|
||||
'roles': self.roles
|
||||
'roles': self.get_roles()
|
||||
})
|
||||
|
||||
if name:
|
||||
doc = frappe.get_doc("Custom Role", name)
|
||||
doc.set('roles', self.roles)
|
||||
doc.save()
|
||||
custom_role = frappe.get_doc("Custom Role", name)
|
||||
custom_role.set('roles', self.get_roles())
|
||||
custom_role.save()
|
||||
else:
|
||||
frappe.get_doc(args).insert()
|
||||
|
||||
|
|
@ -45,5 +55,14 @@ class RolePermissionforPageandReport(Document):
|
|||
check_for_field: name
|
||||
}
|
||||
|
||||
def get_roles(self):
|
||||
roles = []
|
||||
for data in self.roles:
|
||||
roles.append({
|
||||
'role': data.role,
|
||||
'parenttype': 'Custom Role'
|
||||
})
|
||||
return roles
|
||||
|
||||
def update_status(self):
|
||||
return frappe.render_template
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ frappe.ui.form.on('User', {
|
|||
if(!frm.roles_editor) {
|
||||
var role_area = $('<div style="min-height: 300px">')
|
||||
.appendTo(frm.fields_dict.roles_html.wrapper);
|
||||
frm.roles_editor = new frappe.RoleEditor(role_area);
|
||||
frm.roles_editor = new frappe.RoleEditor(role_area, frm);
|
||||
|
||||
var module_area = $('<div style="min-height: 300px">')
|
||||
.appendTo(frm.fields_dict.modules_html.wrapper);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
frappe.RoleEditor = Class.extend({
|
||||
init: function(wrapper) {
|
||||
init: function(wrapper, frm) {
|
||||
var me = this;
|
||||
this.frm = frm;
|
||||
this.wrapper = wrapper;
|
||||
$(wrapper).html('<div class="help">' + __("Loading") + '...</div>')
|
||||
return frappe.call({
|
||||
|
|
@ -11,8 +12,8 @@ frappe.RoleEditor = Class.extend({
|
|||
|
||||
// refresh call could've already happened
|
||||
// when all role checkboxes weren't created
|
||||
if(cur_frm.doc) {
|
||||
cur_frm.roles_editor.show();
|
||||
if(me.frm.doc) {
|
||||
me.frm.roles_editor.show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -53,7 +54,7 @@ frappe.RoleEditor = Class.extend({
|
|||
|
||||
$(this.wrapper).find('input[type="checkbox"]').change(function() {
|
||||
me.set_roles_in_table();
|
||||
cur_frm.dirty();
|
||||
me.frm.dirty();
|
||||
});
|
||||
$(this.wrapper).find('.user-role a').click(function() {
|
||||
me.show_permissions($(this).parent().attr('data-user-role'))
|
||||
|
|
@ -68,7 +69,7 @@ frappe.RoleEditor = Class.extend({
|
|||
.each(function(i, checkbox) { checkbox.checked = false; });
|
||||
|
||||
// set user roles as checked
|
||||
$.each((cur_frm.doc.roles || []), function(i, user_role) {
|
||||
$.each((me.frm.doc.roles || []), function(i, user_role) {
|
||||
var checkbox = $(me.wrapper)
|
||||
.find('[data-user-role="'+user_role.role+'"] input[type="checkbox"]').get(0);
|
||||
if(checkbox) checkbox.checked = true;
|
||||
|
|
@ -78,8 +79,9 @@ frappe.RoleEditor = Class.extend({
|
|||
var opts = this.get_roles();
|
||||
var existing_roles_map = {};
|
||||
var existing_roles_list = [];
|
||||
var me = this;
|
||||
|
||||
$.each((cur_frm.doc.roles || []), function(i, user_role) {
|
||||
$.each((me.frm.doc.roles || []), function(i, user_role) {
|
||||
existing_roles_map[user_role.role] = user_role.name;
|
||||
existing_roles_list.push(user_role.role);
|
||||
});
|
||||
|
|
@ -94,7 +96,7 @@ frappe.RoleEditor = Class.extend({
|
|||
// add new roles that are checked
|
||||
$.each(opts.checked_roles, function(i, role) {
|
||||
if(existing_roles_list.indexOf(role)==-1) {
|
||||
var user_role = frappe.model.add_child(cur_frm.doc, "Has Role", "roles");
|
||||
var user_role = frappe.model.add_child(me.frm.doc, "Has Role", "roles");
|
||||
user_role.role = role;
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue