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() |
