diff --git a/frappe/core/doctype/role_permission_for_page_and_report/__init__.py b/frappe/core/doctype/role_permission_for_page_and_report/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js b/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js new file mode 100644 index 0000000000..06f0bbb53a --- /dev/null +++ b/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js @@ -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 = $('
') + .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() + } + }) + } +}); diff --git a/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.json b/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.json new file mode 100644 index 0000000000..43576b5f93 --- /dev/null +++ b/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.json @@ -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 +} \ No newline at end of file diff --git a/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.py b/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.py new file mode 100644 index 0000000000..9e840c3ab5 --- /dev/null +++ b/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.py @@ -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 diff --git a/frappe/core/doctype/user/user.json b/frappe/core/doctype/user/user.json index ed638bd69b..bebb3c6518 100644 --- a/frappe/core/doctype/user/user.json +++ b/frappe/core/doctype/user/user.json @@ -1,5 +1,4 @@ { - "_liked_by": "[]", "allow_copy": 0, "allow_import": 1, "allow_rename": 1, @@ -1145,7 +1144,7 @@ "length": 0, "no_copy": 0, "options": "Has Role", - "permlevel": 0, + "permlevel": 1, "precision": "", "print_hide": 1, "print_hide_if_no_value": 0, @@ -1878,7 +1877,7 @@ "istable": 0, "max_attachments": 5, "menu_index": 0, - "modified": "2017-02-22 16:47:32.546965", + "modified": "2017-03-02 08:00:49.978706", "modified_by": "Administrator", "module": "Core", "name": "User", diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index ad5ee42f29..556e574f05 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -462,7 +462,7 @@ def get_timezones(): def get_all_roles(arg=None): """return all roles""" 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() def get_roles(arg=None): diff --git a/frappe/patches/v7_3/copy_user_roles_to_has_roles.py b/frappe/patches/v7_3/copy_user_roles_to_has_roles.py index 0e44581230..2410fd5a84 100644 --- a/frappe/patches/v7_3/copy_user_roles_to_has_roles.py +++ b/frappe/patches/v7_3/copy_user_roles_to_has_roles.py @@ -7,6 +7,7 @@ import frappe def execute(): for data in frappe.get_all('User', fields = ["name"]): doc = frappe.get_doc('User', data.name) + doc.set('roles',[]) roles = [{'role': d.role} for d in doc.user_roles] doc.set('roles', roles) for role in doc.roles: diff --git a/frappe/public/css/role_editor.css b/frappe/public/css/role_editor.css index aad8a0fe77..987f2ccb6b 100644 --- a/frappe/public/css/role_editor.css +++ b/frappe/public/css/role_editor.css @@ -3,6 +3,10 @@ width: 50%; float: left; } +.role { + padding-left: 5px; + padding-top: 2px; +} table.user-perm { border-collapse: collapse; width: 100%; diff --git a/frappe/public/js/frappe/form/footer/timeline.js b/frappe/public/js/frappe/form/footer/timeline.js index bac794e58c..0150c16714 100644 --- a/frappe/public/js/frappe/form/footer/timeline.js +++ b/frappe/public/js/frappe/form/footer/timeline.js @@ -461,7 +461,7 @@ frappe.ui.form.Timeline = Class.extend({ if(data[key] && data[key].length) { parts = (data[key] || []).map(function(p) { 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, me.frm.perm); diff --git a/frappe/public/js/frappe/roles_editor.js b/frappe/public/js/frappe/roles_editor.js index edce390e3c..c06e877733 100644 --- a/frappe/public/js/frappe/roles_editor.js +++ b/frappe/public/js/frappe/roles_editor.js @@ -47,7 +47,7 @@ frappe.RoleEditor = Class.extend({ $(me.wrapper).append(repl('
\ \ - %(role_display)s\ + %(role_display)s\
', {role_value: role,role_display:__(role)})); }); diff --git a/frappe/public/less/role_editor.less b/frappe/public/less/role_editor.less index ec17030060..c95f1ebc55 100644 --- a/frappe/public/less/role_editor.less +++ b/frappe/public/less/role_editor.less @@ -4,6 +4,11 @@ float: left; } +.role { + padding-left: 5px; + padding-top: 2px; +} + table.user-perm { border-collapse: collapse; width: 100%;