diff options
Diffstat (limited to 'ishtar_common/menu_base.py')
| -rw-r--r-- | ishtar_common/menu_base.py | 34 | 
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 - | 
