瀏覽代碼

Show Standard Permissions in Reset Permissions Dialog Box

version-14
Anand Doshi 11 年之前
父節點
當前提交
56a43b0c2a
共有 6 個檔案被更改,包括 88 行新增68 行删除
  1. +43
    -36
      frappe/core/page/permission_manager/permission_manager.js
  2. +6
    -4
      frappe/core/page/permission_manager/permission_manager.py
  3. +33
    -24
      frappe/modules/import_file.py
  4. +3
    -3
      frappe/permissions.py
  5. +1
    -1
      frappe/public/js/frappe/dom.js
  6. +2
    -0
      frappe/public/js/frappe/ui/messages.js

+ 43
- 36
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 = $('<div class="form-group pull-right"><a>Show Standard Permissions</a></div>')
.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("<hr><h4>Standard Permissions</h4>");
var $wrapper = $("<p></p>").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('<div class="row">\
<div class="col-xs-4"><b>%(role)s</b>, Level %(permlevel)s %(match)s</div>\
<div class="col-xs-8">%(rights)s</div>\
</div><br>', 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 = $("<div class='row'></div>").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("<a href='#'>"+role+"</a>")
.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();


+ 6
- 4
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"]

+ 33
- 24
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"],


+ 3
- 3
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):


+ 1
- 1
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<options_list.length; i++) {
var v = options_list[i];
value = v.value || v;
value = v.value==undefined ? v : v.value;
label = frappe._(v.label || v);
$('<option>').html(label).attr('value', value).appendTo(this);
}


+ 2
- 0
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;


Loading…
取消
儲存