summaryrefslogtreecommitdiff
path: root/ishtar_common/utils.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-06-04 16:41:41 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-06-12 09:57:24 +0200
commite7418c19b122c5ac0505ad2be5350068d3bf6f6b (patch)
tree735cd414c9dd45334a08f5e8c93224257548aa53 /ishtar_common/utils.py
parent202fb132953d115c2b1983f5f50d2f4b62bb9d5d (diff)
downloadIshtar-e7418c19b122c5ac0505ad2be5350068d3bf6f6b.tar.bz2
Ishtar-e7418c19b122c5ac0505ad2be5350068d3bf6f6b.zip
Rebase migrations
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r--ishtar_common/utils.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 6c77563ef..0b5b1bd57 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -30,6 +30,7 @@ import tempfile
from django import forms
from django.conf import settings
+from django.conf.urls import url
from django.contrib.contenttypes.models import ContentType
from django.contrib.gis.geos import GEOSGeometry
from django.contrib.sessions.backends.db import SessionStore
@@ -56,6 +57,52 @@ class BColors:
UNDERLINE = '\033[4m'
+def check_rights(rights=[], redirect_url='/'):
+ """
+ Decorator that checks the rights to access the view.
+ """
+
+ def decorator(view_func):
+ def _wrapped_view(request, *args, **kwargs):
+ if not rights:
+ return view_func(request, *args, **kwargs)
+ if hasattr(request.user, 'ishtaruser'):
+ if request.user.ishtaruser.has_right('administrator',
+ request.session):
+ kwargs['current_right'] = 'administrator'
+ return view_func(request, *args, **kwargs)
+ for right in rights:
+ # be careful to put the more permissive rights first
+ # if granted it can allow more
+ if request.user.ishtaruser.has_right(right,
+ request.session):
+ kwargs['current_right'] = right
+ return view_func(request, *args, **kwargs)
+ put_session_message(
+ request.session.session_key,
+ _(u"You don't have sufficient permissions to do this action."),
+ 'warning'
+ )
+ return HttpResponseRedirect(redirect_url)
+ return _wrapped_view
+ return decorator
+
+
+def check_rights_condition(rights):
+ """
+ To be used to check in wizard condition_dict
+ """
+ def func(self):
+ request = self.request
+ if request.user.ishtaruser.has_right('administrator', request.session):
+ return True
+ for right in rights:
+ if request.user.ishtaruser.has_right(right, request.session):
+ return True
+ return False
+ return func
+
+
class MultiValueDict(BaseMultiValueDict):
def get(self, *args, **kwargs):
v = super(MultiValueDict, self).getlist(*args, **kwargs)
@@ -703,3 +750,19 @@ def create_default_json_fields(model):
}
)
+
+def get_urls_for_model(model, views):
+ """
+ Generate get and show url for a model
+ """
+ urls = [
+ url(r'show-{}(?:/(?P<pk>.+))?/(?P<type>.+)?$'.format(model.SLUG),
+ check_rights(['view_' + model.SLUG, 'view_own_' + model.SLUG])(
+ getattr(views, 'show_' + model.SLUG)),
+ name="show-" + model.SLUG),
+ url(r'get-{}/(?P<type>.+)?$'.format(model.SLUG),
+ check_rights(['view_' + model.SLUG, 'view_own_' + model.SLUG])(
+ getattr(views, 'get_' + model.SLUG)),
+ name="get-" + model.SLUG),
+ ]
+ return urls