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'),       ) | 
