00b8c59bd1609a20c64ceb0dea9f6fefe0477045
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
13 from project
.groups
import get_employe_from_user
16 def redirect_interdiction(request
, msg
=u
"Vous n'avez pas accès à cette page"):
18 Redirection du la page de login avec un message d'erreur.
20 login_url
= settings
.LOGIN_URL
21 path
= urlquote(request
.get_full_path())
22 tup
= login_url
, REDIRECT_FIELD_NAME
, path
24 request
, messages
.ERROR
,
25 "Votre compte ne permet pas d'accéder à cette partie de l'application."
27 return HttpResponseRedirect('%s?%s=%s' % tup
)
30 def in_drh_or_admin(user
):
32 Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
34 user_groups
= user
.groups
.all()
35 if user
.is_superuser
or \
36 groups
.grp_drh
in user_groups
or \
37 groups
.grp_drh2
in user_groups
:
43 def drh_or_admin_required(fn
):
45 Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
47 def inner(request
, *args
, **kwargs
):
49 if in_drh_or_admin(user
):
50 return fn(request
, *args
, **kwargs
)
52 msg
= u
"Votre compte ne permet pas d'accéder à " \
53 u
"cette partie de l'application."
54 return redirect_interdiction(request
, msg
)
59 def region_protected(model
):
61 def wrapped(request
, id):
62 if request
.user
.is_superuser
:
63 return func(request
, id)
64 user_groups
= request
.user
.groups
.all()
65 if groups
.grp_drh
in user_groups
or \
66 groups
.grp_drh2
in user_groups
:
67 return func(request
, id)
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
:
71 employe
= get_employe_from_user(request
.user
)
73 model
.prefix_implantation
: employe
.implantation
.region
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
)
82 def in_one_of_group(groups
):
84 Test si le user appartient au moins 1 des ces groupes
87 def wrapped(request
, *args
, **kwargs
):
88 user_groups
= request
.user
.groups
.all()
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
)