[minor] ignore permissions option for filters in db_query (#3234)

This commit is contained in:
Rushabh Mehta 2017-05-06 12:43:47 +05:30 committed by Nabin Hait
parent 823b3c1fa5
commit 262f361021
4 changed files with 17 additions and 7 deletions

View file

@ -37,7 +37,7 @@ def get_form_params():
data["save_user_settings"] = json.loads(data["save_user_settings"])
else:
data["save_user_settings"] = True
doctype = data["doctype"]
fields = data["fields"]
@ -51,9 +51,9 @@ def get_form_params():
fieldname = fieldname.strip("`")
df = frappe.get_meta(parenttype).get_field(fieldname)
report_hide = df.report_hide if df else None
# remove the field from the query if the report hide flag is set
if report_hide:
fields.remove(field)
@ -331,7 +331,7 @@ def build_match_conditions(doctype, as_condition=True):
else:
return match_conditions
def get_filters_cond(doctype, filters, conditions):
def get_filters_cond(doctype, filters, conditions, ignore_permissions=None):
if filters:
flt = filters
if isinstance(filters, dict):
@ -347,7 +347,7 @@ def get_filters_cond(doctype, filters, conditions):
query = DatabaseQuery(doctype)
query.filters = flt
query.conditions = conditions
query.build_filter_conditions(flt, conditions)
query.build_filter_conditions(flt, conditions, ignore_permissions)
cond = ' and ' + ' and '.join(query.conditions)
else:

View file

@ -4,7 +4,7 @@
from __future__ import unicode_literals
import frappe
def load_address_and_contact(doc, key):
def load_address_and_contact(doc, key=None):
"""Loads address list and contact list in `__onload`"""
from frappe.geo.doctype.address.address import get_address_display

View file

@ -250,8 +250,11 @@ class DatabaseQuery(object):
if match_conditions:
self.conditions.append("(" + match_conditions + ")")
def build_filter_conditions(self, filters, conditions):
def build_filter_conditions(self, filters, conditions, ignore_permissions=None):
"""build conditions from user filters"""
if ignore_permissions is not None:
self.flags.ignore_permissions = ignore_permissions
if isinstance(filters, dict):
filters = [filters]

View file

@ -5,6 +5,7 @@ from __future__ import unicode_literals
import frappe, unittest
from frappe.model.db_query import DatabaseQuery
from frappe.desk.reportview import get_filters_cond
class TestReportview(unittest.TestCase):
def test_basic(self):
@ -70,6 +71,12 @@ class TestReportview(unittest.TestCase):
self.assertTrue({ "name": todays_event.name } in data)
self.assertTrue({ "name": event.name } in data)
def test_ignore_permissions_for_get_filters_cond(self):
frappe.set_user('test1@example.com')
self.assertRaises(frappe.PermissionError, get_filters_cond, 'DocType', dict(istable=1), [])
self.assertTrue(get_filters_cond('DocType', dict(istable=1), [], ignore_permissions=True))
frappe.set_user('Administrator')
def create_event(subject="_Test Event", starts_on=None):
""" create a test event """