summaryrefslogtreecommitdiff
path: root/ishtar_common/menu_base.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-12-08 02:26:03 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2015-12-08 02:26:03 +0100
commit544cb74d6d49deb73ace116df02716adc5b6a464 (patch)
tree5ea46df7c455810a61d3e278a80d6259c645a286 /ishtar_common/menu_base.py
parent35a972ad5de7aa8191da0463457255b868258ec9 (diff)
downloadIshtar-544cb74d6d49deb73ace116df02716adc5b6a464.tar.bz2
Ishtar-544cb74d6d49deb73ace116df02716adc5b6a464.zip
Use cache for faster rights checking
Diffstat (limited to 'ishtar_common/menu_base.py')
-rw-r--r--ishtar_common/menu_base.py34
1 files changed, 19 insertions, 15 deletions
diff --git a/ishtar_common/menu_base.py b/ishtar_common/menu_base.py
index 2331ecbd7..ab0a43d41 100644
--- a/ishtar_common/menu_base.py
+++ b/ishtar_common/menu_base.py
@@ -17,6 +17,7 @@
# See the file COPYING for details.
+
class SectionItem:
def __init__(self, idx, label, childs=[]):
self.idx = idx
@@ -25,27 +26,29 @@ class SectionItem:
self.available = False
self.items = {}
- def can_be_available(self, user):
+ def can_be_available(self, user, session=None):
for child in self.childs:
- if child.can_be_available(user):
+ if child.can_be_available(user, session=session):
return True
return False
- def is_available(self, user, obj=None):
+ def is_available(self, user, obj=None, session=None):
for child in self.childs:
- if child.is_available(user, obj):
+ if child.is_available(user, obj, session=session):
return True
return False
- def set_items(self, user, items, current_action=None):
+ def set_items(self, user, items, current_action=None, session=None):
selected = None
if user:
- self.available = self.can_be_available(user)
+ self.available = self.can_be_available(user, session=session)
for child in self.childs:
- selected = child.set_items(user, items, current_action) or selected
+ selected = child.set_items(user, items, current_action,
+ session=session) or selected
items[child.idx] = child
return selected
+
class MenuItem:
def __init__(self, idx, label, model=None, access_controls=[]):
self.idx = idx
@@ -54,22 +57,24 @@ class MenuItem:
self.access_controls = access_controls
self.available = False
- def can_be_available(self, user):
+ def can_be_available(self, user, session=None):
if not self.access_controls:
return True
prefix = (self.model._meta.app_label + '.') if self.model else ''
for access_control in self.access_controls:
access_control = prefix + access_control
- if user.has_perm(access_control, self.model) or \
+ if hasattr(user, 'ishtaruser') and \
+ user.ishtaruser.has_perm(access_control, self.model,
+ session=session) or \
access_control in user.get_group_permissions():
return True
# manage by person type
if hasattr(user, 'ishtaruser'):
- if user.ishtaruser.has_right(self.idx):
+ if user.ishtaruser.has_right(self.idx, session=session):
return True
return False
- def is_available(self, user, obj=None):
+ def is_available(self, user, obj=None, session=None):
if not self.access_controls:
return True
prefix = (self.model._meta.app_label + '.') if self.model else ''
@@ -79,13 +84,12 @@ class MenuItem:
return True
# manage by person type
if hasattr(user, 'ishtaruser'):
- if ishtar_user.has_right(self.idx):
+ if user.ishtaruser.has_right(self.idx, session=session):
return True
return False
- def set_items(self, user, items, current_action=None):
+ def set_items(self, user, items, current_action=None, session=None):
if user:
- self.available = self.can_be_available(user)
+ self.available = self.can_be_available(user, session=session)
if self.idx == current_action:
return True
-