diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2010-12-28 15:27:28 +0100 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2010-12-28 15:27:28 +0100 |
| commit | 804e72c38252ef75e0895413363c6a5126da3fb2 (patch) | |
| tree | 522b6bdf54041920d71e5b93452cfe659450663b /ishtar/furnitures | |
| parent | f4e5d1af9a1bcb016f92ffc63a8df8bc3641449d (diff) | |
| download | Ishtar-804e72c38252ef75e0895413363c6a5126da3fb2.tar.bz2 Ishtar-804e72c38252ef75e0895413363c6a5126da3fb2.zip | |
Correction on Access Control - Better management of URLs (refs #49)
Diffstat (limited to 'ishtar/furnitures')
| -rw-r--r-- | ishtar/furnitures/menus.py | 31 | ||||
| -rw-r--r-- | ishtar/furnitures/urls.py | 34 | ||||
| -rw-r--r-- | ishtar/furnitures/views.py | 6 |
3 files changed, 62 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() 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)) |
