summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar/furnitures/menus.py31
-rw-r--r--ishtar/furnitures/urls.py34
-rw-r--r--ishtar/furnitures/views.py6
-rw-r--r--ishtar/templates/base.html8
-rw-r--r--ishtar/urls.py3
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'),
)