diff options
Diffstat (limited to 'ishtar/furnitures/menus.py')
| -rw-r--r-- | ishtar/furnitures/menus.py | 31 | 
1 files changed, 22 insertions, 9 deletions
diff --git a/ishtar/furnitures/menus.py b/ishtar/furnitures/menus.py index 5a2446f79..7ed0a2408 100644 --- a/ishtar/furnitures/menus.py +++ b/ishtar/furnitures/menus.py @@ -31,14 +31,23 @@ class SectionItem:          self.available = False  class MenuItem: -    def __init__(self, idx, label, groups=[]): +    def __init__(self, idx, label, access_controls=[]):          self.idx = idx          self.label = label -        self.groups = groups +        self.access_controls = access_controls          self.available = False -    def is_available(self, user): -        return True +    def can_be_available(self, user): +        for access_control in self.access_controls: +            if user.has_perm('furnitures.' + access_control): +                return True +        return False + +    def is_available(self, user, obj=None): +        for access_control in self.access_controls: +            if user.has_perm('furnitures.' + access_control, obj): +                return True +        return False  class Menu:      def __init__(self, user): @@ -48,13 +57,14 @@ class Menu:          SectionItem('file_management', _(u"File management"),              childs=[                  MenuItem('file_creation', _(u"File creation"), -                    groups=['administrator']), +                    access_controls=['add_file', 'add_own_file']),                  MenuItem('file_modification', _(u"File modification"), -                    groups=['administrator']), +                    access_controls=['change_file', 'change_own_file']),                  MenuItem('file_deletion', _(u"File deletion"), -                    groups=['administrator']), +                    access_controls=['delete_file', 'delete_own_file']),      ]),  ] +        self.items = {}      def init(self):          if self.initialized: @@ -62,9 +72,12 @@ class Menu:          for main_menu in self.childs:              main_menu.available = False              for child in main_menu.childs: -                child.available = child.is_available(self.user) +                if self.user: +                    child.available = child.can_be_available(self.user)                  if child.available:                      main_menu.available = True +                self.items[child.idx] = child          self.initialized = True - +menu = Menu(None) +menu.init()  | 
