@@ -284,7 +284,14 @@ def get_roles(username=None): | |||||
def has_permission(doctype, ptype="read", refdoc=None): | def has_permission(doctype, ptype="read", refdoc=None): | ||||
import frappe.permissions | import frappe.permissions | ||||
return frappe.permissions.has_permission(doctype, ptype, refdoc) | return frappe.permissions.has_permission(doctype, ptype, refdoc) | ||||
def is_table(doctype): | |||||
tables = cache().get_value("is_table") | |||||
if tables==None: | |||||
tables = db.sql_list("select name from tabDocType where ifnull(istable,0)=1") | |||||
cache().set_value("is_table", tables) | |||||
return doctype in tables | |||||
def clear_perms(doctype): | def clear_perms(doctype): | ||||
db.sql("""delete from tabDocPerm where parent=%s""", doctype) | db.sql("""delete from tabDocPerm where parent=%s""", doctype) | ||||
@@ -19,6 +19,7 @@ class Database: | |||||
def __init__(self, host=None, user=None, password=None, ac_name=None, use_default = 0): | def __init__(self, host=None, user=None, password=None, ac_name=None, use_default = 0): | ||||
self.host = host or frappe.conf.db_host or 'localhost' | self.host = host or frappe.conf.db_host or 'localhost' | ||||
self.user = user or frappe.conf.db_name | self.user = user or frappe.conf.db_name | ||||
self._conn = None | |||||
if ac_name: | if ac_name: | ||||
self.user = self.get_db_login(ac_name) or frappe.conf.db_name | self.user = self.get_db_login(ac_name) or frappe.conf.db_name | ||||
@@ -30,11 +31,7 @@ class Database: | |||||
self.auto_commit_on_many_writes = 0 | self.auto_commit_on_many_writes = 0 | ||||
self.password = password or frappe.conf.db_password | self.password = password or frappe.conf.db_password | ||||
self.connect() | |||||
if self.user != 'root': | |||||
self.use(self.user) | |||||
def get_db_login(self, ac_name): | def get_db_login(self, ac_name): | ||||
return ac_name | return ac_name | ||||
@@ -47,6 +44,8 @@ class Database: | |||||
use_unicode=True, charset='utf8') | use_unicode=True, charset='utf8') | ||||
self._conn.converter[246]=float | self._conn.converter[246]=float | ||||
self._cursor = self._conn.cursor() | self._cursor = self._conn.cursor() | ||||
if self.user != 'root': | |||||
self.use(self.user) | |||||
frappe.local.rollback_observers = [] | frappe.local.rollback_observers = [] | ||||
def use(self, db_name): | def use(self, db_name): | ||||
@@ -69,6 +68,9 @@ class Database: | |||||
* returns as a dictionary if as_dict = 1 | * returns as a dictionary if as_dict = 1 | ||||
* returns as a list of lists (with cleaned up dates) if as_list = 1 | * returns as a list of lists (with cleaned up dates) if as_list = 1 | ||||
""" | """ | ||||
if not self._conn: | |||||
self.connect() | |||||
# in transaction validations | # in transaction validations | ||||
self.check_transaction_status(query) | self.check_transaction_status(query) | ||||
@@ -32,11 +32,14 @@ def get_restrictions(user=None): | |||||
return build_restrictions(user) | return build_restrictions(user) | ||||
def build_restrictions(user): | def build_restrictions(user): | ||||
out = {} | |||||
for key, value in frappe.db.sql("""select defkey, defvalue | |||||
from tabDefaultValue where parent=%s and parenttype='Restriction'""", (user,)): | |||||
out.setdefault(key, []) | |||||
out[key].append(value) | |||||
out = frappe.cache().get_value("restrictions:" + user) | |||||
if out==None: | |||||
out = {} | |||||
for key, value in frappe.db.sql("""select defkey, defvalue | |||||
from tabDefaultValue where parent=%s and parenttype='Restriction'""", (user,)): | |||||
out.setdefault(key, []) | |||||
out[key].append(value) | |||||
frappe.cache().set_value("restrictions:" + user, out) | |||||
return out | return out | ||||
def get_defaults(user=None): | def get_defaults(user=None): | ||||
@@ -131,7 +134,7 @@ def clear_default(key=None, value=None, parent=None, name=None, parenttype=None) | |||||
def get_defaults_for(parent="Control Panel"): | def get_defaults_for(parent="Control Panel"): | ||||
"""get all defaults""" | """get all defaults""" | ||||
defaults = frappe.cache().get_value("__defaults:" + parent) | defaults = frappe.cache().get_value("__defaults:" + parent) | ||||
if not defaults: | |||||
if defaults==None: | |||||
res = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue` | res = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue` | ||||
where parent = %s order by creation""", (parent,), as_dict=1) | where parent = %s order by creation""", (parent,), as_dict=1) | ||||
@@ -262,6 +262,8 @@ def clear_cache(doctype=None): | |||||
# clear all | # clear all | ||||
for dt in frappe.db.sql("""select name from tabDocType"""): | for dt in frappe.db.sql("""select name from tabDocType"""): | ||||
clear_single(dt[0]) | clear_single(dt[0]) | ||||
frappe.cache().delete_value("is_table") | |||||
def add_code(doctype, doclist): | def add_code(doctype, doclist): | ||||
import os | import os | ||||
@@ -16,7 +16,7 @@ def check_admin_or_system_manager(): | |||||
def has_permission(doctype, ptype="read", refdoc=None, verbose=True): | def has_permission(doctype, ptype="read", refdoc=None, verbose=True): | ||||
"""check if user has permission""" | """check if user has permission""" | ||||
if frappe.db.get_value("DocType", doctype, "istable")==1: | |||||
if frappe.is_table(doctype): | |||||
return True | return True | ||||
meta = frappe.get_doctype(doctype) | meta = frappe.get_doctype(doctype) | ||||
@@ -33,6 +33,8 @@ def clear_cache(user=None): | |||||
if user: | if user: | ||||
cache.delete_value("bootinfo:" + user) | cache.delete_value("bootinfo:" + user) | ||||
cache.delete_value("lang:" + user) | cache.delete_value("lang:" + user) | ||||
cache.delete_value("roles:" + user) | |||||
cache.delete_value("restrictions:" + user) | |||||
# clear notifications | # clear notifications | ||||
if frappe.flags.in_install_app!="frappe": | if frappe.flags.in_install_app!="frappe": | ||||
@@ -223,8 +223,11 @@ def get_roles(username=None, with_standard=True): | |||||
if username=='Guest': | if username=='Guest': | ||||
return ['Guest'] | return ['Guest'] | ||||
roles = [r[0] for r in frappe.db.sql("""select role from tabUserRole | |||||
where parent=%s and role!='All'""", (username,))] + ['All'] | |||||
roles = frappe.cache().get_value("roles:" + username) | |||||
if not roles: | |||||
roles = [r[0] for r in frappe.db.sql("""select role from tabUserRole | |||||
where parent=%s and role!='All'""", (username,))] + ['All'] | |||||
frappe.cache().set_value("roles:" + username, roles) | |||||
# filter standard if required | # filter standard if required | ||||
if not with_standard: | if not with_standard: | ||||