merge regionalisation
[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
d005588c 9from django.db.models import Q
02c1b3dc 10from django.utils.http import urlquote
e993f3dc 11
c3550a05 12from project import groups
afd3be54 13from project.groups import get_employe_from_user
ae99002a 14
018c8eaf 15
02c1b3dc
JPC
16def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"):
17 """
18 Redirection du la page de login avec un message d'erreur.
19 """
20 login_url = settings.LOGIN_URL
21 path = urlquote(request.get_full_path())
22 tup = login_url, REDIRECT_FIELD_NAME, path
d005588c
DB
23 messages.add_message(
24 request, messages.ERROR,
25 "Votre compte ne permet pas d'accéder à cette partie de l'application."
26 )
02c1b3dc 27 return HttpResponseRedirect('%s?%s=%s' % tup)
d005588c
DB
28
29
018c8eaf
DB
30def in_drh_or_admin(user):
31 """
32 Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
33 """
c3550a05 34 user_groups = user.groups.all()
018c8eaf 35 if user.is_superuser or \
c3550a05
OL
36 groups.grp_drh in user_groups or \
37 groups.grp_drh2 in user_groups:
018c8eaf
DB
38 return True
39 else:
40 return False
d005588c
DB
41
42
018c8eaf
DB
43def drh_or_admin_required(fn):
44 """
45 Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
46 """
47 def inner(request, *args, **kwargs):
48 user = request.user
49 if in_drh_or_admin(user):
50 return fn(request, *args, **kwargs)
02c1b3dc 51
018c8eaf
DB
52 msg = u"Votre compte ne permet pas d'accéder à " \
53 u"cette partie de l'application."
54 return redirect_interdiction(request, msg)
02c1b3dc 55
018c8eaf 56 return inner
d005588c
DB
57
58
ae99002a
DB
59def region_protected(model):
60 def wrapper(func):
61 def wrapped(request, id):
62 if request.user.is_superuser:
63 return func(request, id)
64 user_groups = request.user.groups.all()
c3550a05
OL
65 if groups.grp_drh in user_groups or \
66 groups.grp_drh2 in user_groups:
ae99002a 67 return func(request, id)
c3550a05
OL
68 if groups.grp_correspondants_rh in user_groups or \
69 groups.grp_administrateurs in user_groups or \
70 groups.grp_directeurs_bureau in user_groups:
ae99002a
DB
71 employe = get_employe_from_user(request.user)
72 q = Q(**{
73 model.prefix_implantation: employe.implantation.region
74 })
75 qs = model.objects.filter(q)
76 if int(id) in [o.id for o in qs]:
77 return func(request, id)
78 return redirect_interdiction(request)
79 return wrapped
80 return wrapper
82c5e37d
DB
81
82def in_one_of_group(groups):
83 """
84 Test si le user appartient au moins 1 des ces groupes
85 """
86 def wrapper(fn):
87 def wrapped(request, *args, **kwargs):
88 user_groups = request.user.groups.all()
89 for g in user_groups:
90 if g in groups:
91 return fn(request, *args, **kwargs)
92 msg = u"Votre compte ne permet pas d'accéder à cette partie de l'application."
93 return redirect_interdiction(request, msg)
94 return wrapped
95 return wrapper