diff options
-rw-r--r-- | ishtar/furnitures/menus.py | 31 | ||||
-rw-r--r-- | ishtar/furnitures/urls.py | 34 | ||||
-rw-r--r-- | ishtar/furnitures/views.py | 6 | ||||
-rw-r--r-- | ishtar/templates/base.html | 8 | ||||
-rw-r--r-- | ishtar/urls.py | 3 |
5 files changed, 68 insertions, 14 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() diff --git a/ishtar/furnitures/urls.py b/ishtar/furnitures/urls.py new file mode 100644 index 000000000..17cdb8774 --- /dev/null +++ b/ishtar/furnitures/urls.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2010 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# See the file COPYING for details. + +from django.conf.urls.defaults import * + +from ishtar.urls import BASE_URL +from menus import menu + +urlpatterns, actions = [], [] + +for section in menu.childs: + for menu_item in section.childs: + actions.append(menu_item.idx) +actions = r"|".join(actions) + +urlpatterns += patterns('ishtar.furnitures.views', + url(BASE_URL + r'(?P<action>'+actions+r')/$', 'action', name='action'), +) diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index 20ef4d597..5f1c032a5 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -25,6 +25,7 @@ from django.template import RequestContext from django.shortcuts import render_to_response from ishtar import settings +from menus import menu def index(request): """ @@ -37,7 +38,12 @@ def action(request, action): """ Main page """ + dct = {'current_action':action} return render_to_response('index.html', dct, context_instance=RequestContext(request)) +def file_creation(request): + dct = {'current_action':'file_creation'} + return render_to_response('index.html', dct, + context_instance=RequestContext(request)) diff --git a/ishtar/templates/base.html b/ishtar/templates/base.html index 1433d932d..b25d683e4 100644 --- a/ishtar/templates/base.html +++ b/ishtar/templates/base.html @@ -33,13 +33,13 @@ <div id="main_menu"> <ul> {% for section in MENU.childs %} - <li>{{section.label}} + {% if section.available %}<li>{{section.label}} <ul> - {% for menu_item in section.childs %} + {% for menu_item in section.childs %}{%if menu_item.available%} <li{%ifequal menu_item.idx current_action%} class='selected'{%endifequal%}><a href='{% url action menu_item.idx%}'>{{menu_item.label}}</a></li> - {% endfor %} + {%endif%}{% endfor %} </ul> - </li> + </li>{%endif%} {% endfor %} </ul> </div> diff --git a/ishtar/urls.py b/ishtar/urls.py index b9369ce06..af0c13dc5 100644 --- a/ishtar/urls.py +++ b/ishtar/urls.py @@ -10,8 +10,9 @@ BASE_URL = r'^' + URL_PATH urlpatterns = patterns('', (BASE_URL + 'accounts/', include('registration.urls')), (BASE_URL + r'admin/', include(admin.site.urls)), + (BASE_URL, include('ishtar.furnitures.urls')), ) urlpatterns += patterns('ishtar.furnitures.views', url(BASE_URL + '$', 'index', name='start'), - url(BASE_URL + '(?P<action>\w+)/$', 'action', name='action'), + #url(BASE_URL + '(?P<action>\w+)/$', 'action', name='action'), ) |