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
.contrib
.auth
.decorators
import user_passes_test
10 from django
.core
.urlresolvers
import reverse
11 from django
.utils
.http
import urlquote
13 from project
.groups
import grp_drh
, grp_drh2
, grp_correspondants_rh
14 from project
.groups
import get_employe_from_user
17 def redirect_interdiction(request
, msg
=u
"Vous n'avez pas accès à cette page"):
19 Redirection du la page de login avec un message d'erreur.
21 login_url
= settings
.LOGIN_URL
22 path
= urlquote(request
.get_full_path())
23 tup
= login_url
, REDIRECT_FIELD_NAME
, path
24 messages
.add_message(request
, messages
.ERROR
, "Votre compte ne permet pas d'accéder à cette partie de l'application.")
25 return HttpResponseRedirect('%s?%s=%s' % tup
)
27 def in_drh_or_admin(user
):
29 Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
31 groups
= user
.groups
.all()
32 if user
.is_superuser
or \
33 grp_drh
in groups
or \
39 def drh_or_admin_required(fn
):
41 Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
43 def inner(request
, *args
, **kwargs
):
45 if in_drh_or_admin(user
):
46 return fn(request
, *args
, **kwargs
)
48 msg
= u
"Votre compte ne permet pas d'accéder à " \
49 u
"cette partie de l'application."
50 return redirect_interdiction(request
, msg
)
54 def region_protected(model
):
56 def wrapped(request
, id):
57 if request
.user
.is_superuser
:
58 return func(request
, id)
59 user_groups
= request
.user
.groups
.all()
60 if grp_drh
in user_groups
:
61 return func(request
, id)
62 if grp_correspondants_rh
in user_groups
:
63 employe
= get_employe_from_user(request
.user
)
65 model
.prefix_implantation
: employe
.implantation
.region
67 qs
= model
.objects
.filter(q
)
68 if int(id) in [o
.id for o
in qs
]:
69 return func(request
, id)
70 return redirect_interdiction(request
)
74 def in_one_of_group(groups
):
76 Test si le user appartient au moins 1 des ces groupes
79 def wrapped(request
, *args
, **kwargs
):
80 user_groups
= request
.user
.groups
.all()
83 return fn(request
, *args
, **kwargs
)
84 msg
= u
"Votre compte ne permet pas d'accéder à cette partie de l'application."
85 return redirect_interdiction(request
, msg
)