d9d8ce9094f8d059e10ce8bd24d5c8dccbb54fa8
1 # -*- encoding: utf-8 -*-
5 from django
.http
import HttpResponseRedirect
6 from django
.conf
import settings
7 from django
.contrib
import messages
8 from django
.contrib
.auth
import REDIRECT_FIELD_NAME
9 from django
.db
.models
import Q
10 from django
.utils
.http
import urlquote
12 from project
import groups
15 def redirect_interdiction(request
, msg
=u
"Vous n'avez pas accès à cette page"):
17 Redirection du la page de login avec un message d'erreur.
19 login_url
= settings
.LOGIN_URL
20 path
= urlquote(request
.get_full_path())
21 tup
= login_url
, REDIRECT_FIELD_NAME
, path
23 request
, messages
.ERROR
,
24 "Votre compte ne permet pas d'accéder à cette partie de l'application."
26 return HttpResponseRedirect('%s?%s=%s' % tup
)
29 def in_drh_or_admin(user
):
31 Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
33 user_groups
= [g
.name
for g
in user
.groups
.all()]
34 if user
.is_superuser
or \
35 groups
.DRH_NIVEAU_1
in user_groups
or \
36 groups
.DRH_NIVEAU_2
in user_groups
:
42 def drh_or_admin_required(fn
):
44 Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
46 def inner(request
, *args
, **kwargs
):
48 if in_drh_or_admin(user
):
49 return fn(request
, *args
, **kwargs
)
51 msg
= u
"Votre compte ne permet pas d'accéder à " \
52 u
"cette partie de l'application."
53 return redirect_interdiction(request
, msg
)
58 def region_protected(model
):
60 def wrapped(request
, id):
61 if request
.user
.is_superuser
:
62 return func(request
, id)
63 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
64 if groups
.DRH_NIVEAU_1
in user_groups
or \
65 groups
.DRH_NIVEAU_2
in user_groups
:
66 return func(request
, id)
67 if groups
.CORRESPONDANT_RH
in user_groups
or \
68 groups
.ADMINISTRATEURS
in user_groups
or \
69 groups
.DIRECTEUR_DE_BUREAU
in user_groups
:
70 employe
= groups
.get_employe_from_user(request
.user
)
72 model
.prefix_implantation
: employe
.implantation
.region
74 qs
= model
.objects
.filter(q
)
75 if int(id) in [o
.id for o
in qs
]:
76 return func(request
, id)
77 return redirect_interdiction(request
)
81 def in_one_of_group(groups
):
83 Test si le user appartient au moins 1 des ces groupes
86 def wrapped(request
, *args
, **kwargs
):
87 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
90 return fn(request
, *args
, **kwargs
)
91 msg
= u
"Votre compte ne permet pas d'accéder à cette partie de l'application."
92 return redirect_interdiction(request
, msg
)