Browse Source

Merge pull request #2856 from rohitwaghchaure/v8_patch_fix

[fix] Separate has role patch to make custom role from custom docperm, if custom role not available then chceck standard permission for page and report
version-14
Nabin Hait 8 years ago
committed by GitHub
parent
commit
901666a3ee
5 changed files with 64 additions and 54 deletions
  1. +10
    -12
      frappe/boot.py
  2. +5
    -0
      frappe/config/setup.py
  3. +1
    -0
      frappe/patches.txt
  4. +2
    -42
      frappe/patches/v8_0/rename_page_role_to_has_role.py
  5. +46
    -0
      frappe/patches/v8_0/set_user_permission_for_page_and_report.py

+ 10
- 12
frappe/boot.py View File

@@ -109,25 +109,23 @@ def get_user_page_or_report(parent):
""".format(field=parent.lower(), roles = ', '.join(['%s']*len(roles))), roles, as_dict=1):

has_role[p.name] = {"modified":p.modified, "title": p.name}
if not has_role:
for p in frappe.db.sql("""select distinct

for p in frappe.db.sql("""select distinct
tab{parent}.name, tab{parent}.modified, tab{parent}.{field} as title
from `tabHas Role`, `tab{parent}`
where `tabHas Role`.role in ({roles})
and `tabHas Role`.parent = `tab{parent}`.name
""".format(parent=parent, field=field, roles = ', '.join(['%s']*len(roles))),
roles, as_dict=True):

has_role[p.name] = {"modified":p.modified, "title": p.title}
and `tabHas Role`.parent = `tab{parent}`.name
""".format(parent=parent, field=field, roles = ', '.join(['%s']*len(roles))), roles, as_dict=True):
if p.name not in has_role:
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
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}
where `tabHas Role`.parent=tab{parent}.name) = 0""".format(parent=parent, field=field), as_dict=1):
if p.name not in has_role:
has_role[p.name] = {"modified":p.modified, "title": p.title}

return has_role



+ 5
- 0
frappe/config/setup.py View File

@@ -45,6 +45,11 @@ def get_data():
"icon": "fa fa-upload",
"description": _("Show or hide modules globally.")
},
{
"type": "doctype",
"name": "Role Permission for Page and Report",
"description": _("Set custom roles for page and report")
},
{
"type": "report",
"is_query_report": True,


+ 1
- 0
frappe/patches.txt View File

@@ -13,6 +13,7 @@ frappe.patches.v8_0.drop_is_custom_from_docperm
execute:frappe.reload_doc('core', 'doctype', 'custom_docperm')
frappe.patches.v8_0.rename_page_role_to_has_role
frappe.patches.v7_2.setup_custom_perms #2017-01-19
frappe.patches.v8_0.set_user_permission_for_page_and_report
frappe.patches.v8_0.drop_in_dialog
execute:frappe.reload_doc('core', 'doctype', 'role')
execute:frappe.reload_doc('core', 'doctype', 'user')


+ 2
- 42
frappe/patches/v8_0/rename_page_role_to_has_role.py View File

@@ -10,7 +10,6 @@ def execute():
reload_doc()
set_ref_doctype_roles_to_report()
copy_user_roles_to_has_roles()
set_user_permission_for_page_and_report()
remove_doctypes()

def reload_doc():
@@ -18,7 +17,6 @@ def reload_doc():
frappe.reload_doc("core", 'doctype', "report")
frappe.reload_doc("core", 'doctype', "user")
frappe.reload_doc("core", 'doctype', "has_role")
frappe.reload_doc("core", 'doctype', "custom_role")
def set_ref_doctype_roles_to_report():
for data in frappe.get_all('Report', fields=["name"]):
@@ -30,7 +28,7 @@ def set_ref_doctype_roles_to_report():
row.db_update()
except:
pass
def copy_user_roles_to_has_roles():
for data in frappe.get_all('User', fields = ["name"]):
doc = frappe.get_doc('User', data.name)
@@ -42,46 +40,8 @@ def copy_user_roles_to_has_roles():
})
for role in doc.roles:
role.db_update()
def set_user_permission_for_page_and_report():
make_custom_roles_for_page_and_report()
def make_custom_roles_for_page_and_report():
for doctype in ['Page', 'Report']:
for data in get_data(doctype):
doc = frappe.get_doc(doctype, data.name)
roles = get_roles(doctype, data, doc)
make_custom_roles(doctype, doc.name, roles)

def get_data(doctype):
fields = ["name"] if doctype == 'Page' else ["name", "ref_doctype"]
return frappe.get_all(doctype, fields = fields)

def get_roles(doctype, data, doc):
roles = []
if doctype == 'Page':
for d in doc.roles:
if frappe.db.exists('Role', d.role):
roles.append({'role': d.role})
else:
out = frappe.get_all('Custom DocPerm', fields='distinct role', filters=dict(parent = data.ref_doctype))
if not out:
out = frappe.get_all('DocPerm', fields='distinct role', filters=dict(parent = data.ref_doctype))
for d in out:
roles.append({'role': d.role})
return roles

def make_custom_roles(doctype, name, roles):
field = doctype.lower()

if roles:
custom_permission = frappe.get_doc({
'doctype': 'Custom Role',
field : name,
'roles' : roles
}).insert()

def remove_doctypes():
for doctype in ['UserRole', 'Event Role']:
if frappe.db.exists('DocType', doctype):
frappe.delete_doc('DocType', doctype)
frappe.delete_doc('DocType', doctype)

+ 46
- 0
frappe/patches/v8_0/set_user_permission_for_page_and_report.py View File

@@ -0,0 +1,46 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt

from __future__ import unicode_literals
import frappe

def execute():
if not frappe.db.exists('DocType', 'Custom Role'):
frappe.reload_doc("core", 'doctype', "custom_role")
set_user_permission_for_page_and_report()

def set_user_permission_for_page_and_report():
make_custom_roles_for_page_and_report()

def make_custom_roles_for_page_and_report():
for doctype in ['Page', 'Report']:
for data in get_data(doctype):
doc = frappe.get_doc(doctype, data.name)
roles = get_roles(doctype, data, doc)
make_custom_roles(doctype, doc.name, roles)

def get_data(doctype):
fields = ["name"] if doctype == 'Page' else ["name", "ref_doctype"]
return frappe.get_all(doctype, fields = fields)

def get_roles(doctype, data, doc):
roles = []
if doctype == 'Page':
for d in doc.roles:
if frappe.db.exists('Role', d.role):
roles.append({'role': d.role})
else:
out = frappe.get_all('Custom DocPerm', fields='distinct role', filters=dict(parent = data.ref_doctype))
for d in out:
roles.append({'role': d.role})
return roles

def make_custom_roles(doctype, name, roles):
field = doctype.lower()

if roles:
custom_permission = frappe.get_doc({
'doctype': 'Custom Role',
field : name,
'roles' : roles
}).insert()

Loading…
Cancel
Save