From 56a43b0c2afad01072811292bd98e9f6362a5b9c Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 24 Feb 2014 17:30:15 +0530 Subject: [PATCH] Show Standard Permissions in Reset Permissions Dialog Box --- .../permission_manager/permission_manager.js | 79 ++++++++++--------- .../permission_manager/permission_manager.py | 10 ++- frappe/modules/import_file.py | 57 +++++++------ frappe/permissions.py | 6 +- frappe/public/js/frappe/dom.js | 2 +- frappe/public/js/frappe/ui/messages.js | 2 + 6 files changed, 88 insertions(+), 68 deletions(-) diff --git a/frappe/core/page/permission_manager/permission_manager.js b/frappe/core/page/permission_manager/permission_manager.js index fe4201a22a..a449a30629 100644 --- a/frappe/core/page/permission_manager/permission_manager.js +++ b/frappe/core/page/permission_manager/permission_manager.js @@ -80,7 +80,7 @@ frappe.PermissionEngine = Class.extend({ var me = this; this.doctype_select = this.wrapper.appframe.add_select("doctypes", - [frappe._("Select Document Type")+"..."].concat(this.options.doctypes)) + [{value: "", label: frappe._("Select Document Type")+"..."}].concat(this.options.doctypes)) .change(function() { frappe.set_route("permission-manager", $(this).val()); }); @@ -90,13 +90,6 @@ frappe.PermissionEngine = Class.extend({ .change(function() { me.refresh(); }); - this.standard_permissions_link = $('
Show Standard Permissions
') - .appendTo(me.wrapper.appframe.parent.find(".appframe-form .container")) - .css({"margin-top": "7px"}) - .find("a") - .on("click", function() { - return me.show_standard_permissions(); - }); this.set_from_route(); }, set_from_route: function() { @@ -107,19 +100,15 @@ frappe.PermissionEngine = Class.extend({ this.refresh(); } }, - show_standard_permissions: function() { - return; - - var doctype = this.doctype_select.val(); + get_standard_permissions: function(callback) { + var doctype = this.get_doctype(); if(doctype) { - frappe.call({ + return frappe.call({ module:"frappe.core", page:"permission_manager", method: "get_standard_permissions", args: {doctype: doctype}, - callback: function(r) { - console.log(r); - } + callback: callback }); } return false; @@ -127,7 +116,8 @@ frappe.PermissionEngine = Class.extend({ make_reset_button: function() { var me = this; me.reset_button = me.wrapper.appframe.set_title_right("Reset Permissions", function() { - if(frappe.confirm("Reset Permissions for " + me.get_doctype() + "?", function() { + me.get_standard_permissions(function(data) { + var d = frappe.confirm("Reset Permissions for " + me.get_doctype() + "?", function() { return frappe.call({ module:"frappe.core", page:"permission_manager", @@ -137,8 +127,27 @@ frappe.PermissionEngine = Class.extend({ }, callback: function() { me.refresh(); } }); - })); - }).toggle(false); + }); + + // show standard permissions + var $d = $(d.wrapper).find(".msgprint").append("

Standard Permissions

"); + var $wrapper = $("

").appendTo($d); + $.each(data.message, function(i, d) { + d.rights = []; + $.each(me.rights, function(i, r) { + if(d[r]===1) { + d.rights.push(r==="restrict" ? "Can Restrict" : toTitle(r)); + } + }); + d.rights = d.rights.join(", "); + d.match = d.match && "["+d.match+"]" || ""; + $wrapper.append(repl('
\ +
%(role)s, Level %(permlevel)s %(match)s
\ +
%(rights)s
\ +

', d)); + }); + }); + }).toggle(false); }, get_doctype: function() { var doctype = this.doctype_select.val(); @@ -238,26 +247,23 @@ frappe.PermissionEngine = Class.extend({ var perm_cell = add_cell(row, d, "permissions").css("padding-top", 0); var perm_container = $("
").appendTo(perm_cell); - add_check(perm_container, d, "read"); - add_check(perm_container, d, "restricted"); - add_check(perm_container, d, "write"); - add_check(perm_container, d, "create"); - add_check(perm_container, d, "delete"); - add_check(perm_container, d, "submit"); - add_check(perm_container, d, "cancel"); - add_check(perm_container, d, "amend"); - add_check(perm_container, d, "report"); - add_check(perm_container, d, "import"); - add_check(perm_container, d, "export"); - add_check(perm_container, d, "print"); - add_check(perm_container, d, "email"); - add_check(perm_container, d, "restrict", "Can Restrict"); - + + $.each(me.rights, function(i, r) { + if(r==="restrict") { + add_check(perm_container, d, "restrict", "Can Restrict"); + } else { + add_check(perm_container, d, r); + } + }) + // buttons me.add_match_button(row, d); me.add_delete_button(row, d); }); }, + rights: ["read", "restricted", "write", "create", "delete", "submit", "cancel", "amend", + "report", "import", "export", "print", "email", "restrict"], + set_show_users: function(cell, role) { cell.html(""+role+"") .find("a") @@ -427,11 +433,12 @@ frappe.PermissionEngine = Class.extend({ return frappe.call({ module: "frappe.core", page: "permission_manager", - method: "update_match", + method: "update", args: { name: perm.name, doctype: perm.parent, - match: match_value + ptype: "match", + value: match_value }, callback: function() { dialog.hide(); diff --git a/frappe/core/page/permission_manager/permission_manager.py b/frappe/core/page/permission_manager/permission_manager.py index 0ee443cf09..0a418bbf92 100644 --- a/frappe/core/page/permission_manager/permission_manager.py +++ b/frappe/core/page/permission_manager/permission_manager.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe import frappe.defaults +from frappe.modules.import_file import get_file_path, read_doclist_from_file @frappe.whitelist() def get_roles_and_doctypes(): @@ -83,7 +84,8 @@ def get_users_with_role(role): and tabUserRole.parent = tabProfile.name and ifnull(tabProfile.enabled,0)=1""", role)] -@frappe.whitelist -def get_standard_permissions(): - # TODO - pass +@frappe.whitelist() +def get_standard_permissions(doctype): + module = frappe.conn.get_value("DocType", doctype, "module") + path = get_file_path(module, "DocType", doctype) + return [d for d in read_doclist_from_file(path) if d.get("doctype")=="DocPerm"] diff --git a/frappe/modules/import_file.py b/frappe/modules/import_file.py index 44ef628e9c..2e43c752ba 100644 --- a/frappe/modules/import_file.py +++ b/frappe/modules/import_file.py @@ -17,44 +17,53 @@ def import_files(module, dt=None, dn=None, force=False): def import_file(module, dt, dn, force=False): """Sync a file from txt if modifed, return false if not updated""" + path = get_file_path(module, dt, dn) + ret = import_file_by_path(path, force) + return ret + +def get_file_path(module, dt, dn): dt, dn = scrub_dt_dn(dt, dn) path = os.path.join(get_module_path(module), os.path.join(dt, dn, dn + '.txt')) + + return path - ret = import_file_by_path(path, force) - return ret - def import_file_by_path(path, force=False): frappe.flags.in_import = True + doclist = read_doclist_from_file(path) + + if doclist: + doc = doclist[0] + + if not force: + # check if timestamps match + if doc['modified']==str(frappe.conn.get_value(doc['doctype'], doc['name'], 'modified')): + return False + + original_modified = doc["modified"] + + import_doclist(doclist) + + # since there is a new timestamp on the file, update timestamp in + frappe.conn.sql("update `tab%s` set modified=%s where name=%s" % \ + (doc['doctype'], '%s', '%s'), + (original_modified, doc['name'])) + + frappe.flags.in_import = False + return True + +def read_doclist_from_file(path): + doclist = None if os.path.exists(path): from frappe.modules.utils import peval_doclist with open(path, 'r') as f: doclist = peval_doclist(f.read()) - - if doclist: - doc = doclist[0] - - if not force: - # check if timestamps match - if doc['modified']==str(frappe.conn.get_value(doc['doctype'], doc['name'], 'modified')): - return False - - original_modified = doc["modified"] - - import_doclist(doclist) - - # since there is a new timestamp on the file, update timestamp in - frappe.conn.sql("update `tab%s` set modified=%s where name=%s" % \ - (doc['doctype'], '%s', '%s'), - (original_modified, doc['name'])) - else: raise Exception, '%s missing' % path - - frappe.flags.in_import = False - return True + + return doclist ignore_values = { "Report": ["disabled"], diff --git a/frappe/permissions.py b/frappe/permissions.py index 51238b383b..5d872b419c 100644 --- a/frappe/permissions.py +++ b/frappe/permissions.py @@ -6,6 +6,9 @@ import frappe from frappe import _, msgprint, _dict from frappe.utils import cint +rights = ["read", "write", "create", "submit", "cancel", "amend", + "report", "import", "export", "print", "email", "restrict", "delete", "restricted"] + def check_admin_or_system_manager(): if ("System Manager" not in frappe.get_roles()) and \ (frappe.session.user!="Administrator"): @@ -43,9 +46,6 @@ def has_permission(doctype, ptype="read", refdoc=None, verbose=True): return True -rights = ["read", "write", "create", "submit", "cancel", "amend", - "report", "import", "export", "print", "email", "restrict", "delete", "restricted"] - def get_user_perms(meta, user=None): cache_key = (meta[0].name, user) if not frappe.local.user_perms.get(cache_key): diff --git a/frappe/public/js/frappe/dom.js b/frappe/public/js/frappe/dom.js index cdc9bf48a5..b0b6127845 100644 --- a/frappe/public/js/frappe/dom.js +++ b/frappe/public/js/frappe/dom.js @@ -239,7 +239,7 @@ frappe.dom.set_box_shadow = function(ele, spread) { // create options for(var i=0; i').html(label).attr('value', value).appendTo(this); } diff --git a/frappe/public/js/frappe/ui/messages.js b/frappe/public/js/frappe/ui/messages.js index 530dd2a2fd..1f5c185f34 100644 --- a/frappe/public/js/frappe/ui/messages.js +++ b/frappe/public/js/frappe/ui/messages.js @@ -34,6 +34,8 @@ frappe.confirm = function(message, ifyes, ifno) { d.hide(); ifno && ifno(); }); + + return d; } var msg_dialog=null;