rh.decorators au niveau project
[auf_rh_dae.git] / project / decorators.py
CommitLineData
e993f3dc 1# -*- encoding: utf-8 -*-
2"""
3Décorateurs AUF
4"""
e993f3dc 5from django.http import HttpResponseRedirect
02c1b3dc 6from django.conf import settings
acbc95a1 7from django.contrib import messages
02c1b3dc 8from django.contrib.auth import REDIRECT_FIELD_NAME
acbc95a1
DB
9from django.contrib.auth.decorators import user_passes_test
10from django.core.urlresolvers import reverse
02c1b3dc 11from django.utils.http import urlquote
e993f3dc 12
018c8eaf
DB
13from project.groups import grp_drh, grp_drh2
14
02c1b3dc
JPC
15def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"):
16 """
17 Redirection du la page de login avec un message d'erreur.
18 """
19 login_url = settings.LOGIN_URL
20 path = urlquote(request.get_full_path())
21 tup = login_url, REDIRECT_FIELD_NAME, path
22 messages.add_message(request, messages.ERROR, "Votre compte ne permet pas d'accéder à cette partie de l'application.")
23 return HttpResponseRedirect('%s?%s=%s' % tup)
018c8eaf
DB
24
25def in_drh_or_admin(user):
26 """
27 Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
28 """
29 groups = user.groups.all()
30 if user.is_superuser or \
31 grp_drh in groups or \
32 grp_drh2 in groups:
33 return True
34 else:
35 return False
36
37def drh_or_admin_required(fn):
38 """
39 Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
40 """
41 def inner(request, *args, **kwargs):
42 user = request.user
43 if in_drh_or_admin(user):
44 return fn(request, *args, **kwargs)
02c1b3dc 45
018c8eaf
DB
46 msg = u"Votre compte ne permet pas d'accéder à " \
47 u"cette partie de l'application."
48 return redirect_interdiction(request, msg)
02c1b3dc 49
018c8eaf 50 return inner