@@ -0,0 +1,55 @@ | |||||
// Copyright (c) 2016, Frappe Technologies and contributors | |||||
// For license information, please see license.txt | |||||
frappe.ui.form.on('Role Permission for Page and Report', { | |||||
refresh: function(frm) { | |||||
frm.disable_save(); | |||||
frm.role_area.hide(); | |||||
}, | |||||
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); | |||||
} | |||||
}, | |||||
page: function(frm) { | |||||
frm.trigger("get_roles") | |||||
}, | |||||
report: function(frm){ | |||||
frm.trigger("get_roles") | |||||
}, | |||||
get_roles: function(frm) { | |||||
frm.role_area.show(); | |||||
return frappe.call({ | |||||
method:"get_custom_roles", | |||||
doc: frm.doc, | |||||
callback: function(r) { | |||||
refresh_field('roles') | |||||
frm.roles_editor.show() | |||||
} | |||||
}) | |||||
}, | |||||
update: function(frm) { | |||||
if(frm.roles_editor) { | |||||
frm.roles_editor.set_roles_in_table() | |||||
} | |||||
return frappe.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() | |||||
} | |||||
}) | |||||
} | |||||
}); |
@@ -0,0 +1,300 @@ | |||||
{ | |||||
"allow_copy": 1, | |||||
"allow_import": 0, | |||||
"allow_rename": 0, | |||||
"beta": 0, | |||||
"creation": "2017-02-13 17:33:25.157332", | |||||
"custom": 0, | |||||
"docstatus": 0, | |||||
"doctype": "DocType", | |||||
"document_type": "", | |||||
"editable_grid": 1, | |||||
"engine": "InnoDB", | |||||
"fields": [ | |||||
{ | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"columns": 0, | |||||
"fieldname": "set_role_for", | |||||
"fieldtype": "Select", | |||||
"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": "Set Role For", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"options": "\nPage\nReport", | |||||
"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, | |||||
"depends_on": "eval:doc.set_role_for == 'Page'", | |||||
"fieldname": "page", | |||||
"fieldtype": "Link", | |||||
"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": "Page", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"options": "Page", | |||||
"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, | |||||
"depends_on": "eval:doc.set_role_for == 'Report'", | |||||
"fieldname": "report", | |||||
"fieldtype": "Link", | |||||
"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": "Report", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"options": "Report", | |||||
"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": "roles_permission", | |||||
"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, | |||||
"label": "Allow Roles", | |||||
"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, | |||||
"depends_on": "", | |||||
"fieldname": "roles_html", | |||||
"fieldtype": "HTML", | |||||
"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": "Roles Html", | |||||
"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": "roles", | |||||
"fieldtype": "Table", | |||||
"hidden": 1, | |||||
"ignore_user_permissions": 0, | |||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | |||||
"in_global_search": 0, | |||||
"in_list_view": 0, | |||||
"in_standard_filter": 0, | |||||
"label": "Roles", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"options": "Has Role", | |||||
"permlevel": 0, | |||||
"precision": "", | |||||
"print_hide": 0, | |||||
"print_hide_if_no_value": 0, | |||||
"read_only": 1, | |||||
"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": "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 | |||||
} | |||||
], | |||||
"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_by": "Administrator", | |||||
"module": "Core", | |||||
"name": "Role Permission for Page and Report", | |||||
"name_case": "", | |||||
"owner": "Administrator", | |||||
"permissions": [ | |||||
{ | |||||
"amend": 0, | |||||
"apply_user_permissions": 0, | |||||
"cancel": 0, | |||||
"create": 1, | |||||
"delete": 1, | |||||
"email": 1, | |||||
"export": 0, | |||||
"if_owner": 0, | |||||
"import": 0, | |||||
"permlevel": 0, | |||||
"print": 1, | |||||
"read": 1, | |||||
"report": 0, | |||||
"role": "System Manager", | |||||
"set_user_permissions": 0, | |||||
"share": 1, | |||||
"submit": 0, | |||||
"write": 1 | |||||
} | |||||
], | |||||
"quick_entry": 1, | |||||
"read_only": 0, | |||||
"read_only_onload": 0, | |||||
"show_name_in_global_search": 0, | |||||
"sort_field": "modified", | |||||
"sort_order": "DESC", | |||||
"track_changes": 0, | |||||
"track_seen": 0 | |||||
} |
@@ -0,0 +1,49 @@ | |||||
# -*- coding: utf-8 -*- | |||||
# Copyright (c) 2015, Frappe Technologies and contributors | |||||
# For license information, please see license.txt | |||||
from __future__ import unicode_literals | |||||
import frappe | |||||
from frappe.model.document import Document | |||||
class RolePermissionforPageandReport(Document): | |||||
def get_custom_roles(self): | |||||
args = self.get_args() | |||||
self.set('roles', []) | |||||
name = frappe.db.get_value('Custom Role', args, "name") | |||||
if name: | |||||
doc = frappe.get_doc('Custom Role', name) | |||||
else: | |||||
doctype = self.set_role_for | |||||
docname = self.page if self.set_role_for == 'Page' else self.report | |||||
doc = frappe.get_doc(doctype, docname) | |||||
self.set('roles', doc.roles) | |||||
def set_custom_roles(self): | |||||
args = self.get_args() | |||||
name = frappe.db.get_value('Custom Role', args, "name") | |||||
args.update({ | |||||
'doctype': 'Custom Role', | |||||
'roles': self.roles | |||||
}) | |||||
if name: | |||||
doc = frappe.get_doc("Custom Role", name) | |||||
doc.set('roles', self.roles) | |||||
doc.save() | |||||
else: | |||||
frappe.get_doc(args).insert() | |||||
def get_args(self, row=None): | |||||
name = self.page if self.set_role_for == 'Page' else self.report | |||||
check_for_field = self.set_role_for.replace(" ","_").lower() | |||||
return { | |||||
check_for_field: name | |||||
} | |||||
def update_status(self): | |||||
return frappe.render_template |
@@ -1,5 +1,4 @@ | |||||
{ | { | ||||
"_liked_by": "[]", | |||||
"allow_copy": 0, | "allow_copy": 0, | ||||
"allow_import": 1, | "allow_import": 1, | ||||
"allow_rename": 1, | "allow_rename": 1, | ||||
@@ -1145,7 +1144,7 @@ | |||||
"length": 0, | "length": 0, | ||||
"no_copy": 0, | "no_copy": 0, | ||||
"options": "Has Role", | "options": "Has Role", | ||||
"permlevel": 0, | |||||
"permlevel": 1, | |||||
"precision": "", | "precision": "", | ||||
"print_hide": 1, | "print_hide": 1, | ||||
"print_hide_if_no_value": 0, | "print_hide_if_no_value": 0, | ||||
@@ -1878,7 +1877,7 @@ | |||||
"istable": 0, | "istable": 0, | ||||
"max_attachments": 5, | "max_attachments": 5, | ||||
"menu_index": 0, | "menu_index": 0, | ||||
"modified": "2017-02-22 16:47:32.546965", | |||||
"modified": "2017-03-02 08:00:49.978706", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Core", | "module": "Core", | ||||
"name": "User", | "name": "User", | ||||
@@ -462,7 +462,7 @@ def get_timezones(): | |||||
def get_all_roles(arg=None): | def get_all_roles(arg=None): | ||||
"""return all roles""" | """return all roles""" | ||||
return [r[0] for r in frappe.db.sql("""select name from tabRole | return [r[0] for r in frappe.db.sql("""select name from tabRole | ||||
where name not in ('Administrator', 'Guest', 'All') and not disabled order by name""")] | |||||
where name not in ('Administrator', 'Guest', 'All') and not disabled and desk_access = '1' order by name""")] | |||||
@frappe.whitelist() | @frappe.whitelist() | ||||
def get_roles(arg=None): | def get_roles(arg=None): | ||||
@@ -7,6 +7,7 @@ import frappe | |||||
def execute(): | def execute(): | ||||
for data in frappe.get_all('User', fields = ["name"]): | for data in frappe.get_all('User', fields = ["name"]): | ||||
doc = frappe.get_doc('User', data.name) | doc = frappe.get_doc('User', data.name) | ||||
doc.set('roles',[]) | |||||
roles = [{'role': d.role} for d in doc.user_roles] | roles = [{'role': d.role} for d in doc.user_roles] | ||||
doc.set('roles', roles) | doc.set('roles', roles) | ||||
for role in doc.roles: | for role in doc.roles: |
@@ -3,6 +3,10 @@ | |||||
width: 50%; | width: 50%; | ||||
float: left; | float: left; | ||||
} | } | ||||
.role { | |||||
padding-left: 5px; | |||||
padding-top: 2px; | |||||
} | |||||
table.user-perm { | table.user-perm { | ||||
border-collapse: collapse; | border-collapse: collapse; | ||||
width: 100%; | width: 100%; | ||||
@@ -461,7 +461,7 @@ frappe.ui.form.Timeline = Class.extend({ | |||||
if(data[key] && data[key].length) { | if(data[key] && data[key].length) { | ||||
parts = (data[key] || []).map(function(p) { | parts = (data[key] || []).map(function(p) { | ||||
var df = frappe.meta.get_docfield(me.frm.doctype, p[0], me.frm.docname); | var df = frappe.meta.get_docfield(me.frm.doctype, p[0], me.frm.docname); | ||||
if(!df.hidden) { | |||||
if(df && !df.hidden) { | |||||
var field_display_status = frappe.perm.get_field_display_status(df, null, | var field_display_status = frappe.perm.get_field_display_status(df, null, | ||||
me.frm.perm); | me.frm.perm); | ||||
@@ -47,7 +47,7 @@ frappe.RoleEditor = Class.extend({ | |||||
$(me.wrapper).append(repl('<div class="user-role" \ | $(me.wrapper).append(repl('<div class="user-role" \ | ||||
data-user-role="%(role_value)s">\ | data-user-role="%(role_value)s">\ | ||||
<input type="checkbox" style="margin-top:0px;"> \ | <input type="checkbox" style="margin-top:0px;"> \ | ||||
<a href="#" class="grey">%(role_display)s</a>\ | |||||
<a href="#" class="grey role">%(role_display)s</a>\ | |||||
</div>', {role_value: role,role_display:__(role)})); | </div>', {role_value: role,role_display:__(role)})); | ||||
}); | }); | ||||
@@ -4,6 +4,11 @@ | |||||
float: left; | float: left; | ||||
} | } | ||||
.role { | |||||
padding-left: 5px; | |||||
padding-top: 2px; | |||||
} | |||||
table.user-perm { | table.user-perm { | ||||
border-collapse: collapse; | border-collapse: collapse; | ||||
width: 100%; | width: 100%; | ||||