1 # -*- encoding: utf-8 -*-
3 from django
.contrib
import messages
4 from django
.contrib
.auth
.decorators
import user_passes_test
5 from django
.core
.urlresolvers
import reverse
6 from django
.http
import HttpResponseRedirect
7 from workflow
import dae_groupes
8 from project
.dae
import models
as dae
9 from project
.rh_v1
import models
as rh
11 def user_in_dae_groupes(user
):
13 Teste si un user Django fait parti des groupes prédéfinis de DAE.
15 for g
in user
.groups
.all():
20 def redirect_interdiction(request
, msg
=u
"Vous n'avez pas accès à cette page"):
22 Redirection du la page de login avec un message d'erreur.
24 from django
.conf
import settings
25 from django
.contrib
.auth
import REDIRECT_FIELD_NAME
26 from django
.utils
.http
import urlquote
27 login_url
= settings
.LOGIN_URL
28 path
= urlquote(request
.get_full_path())
29 tup
= login_url
, REDIRECT_FIELD_NAME
, path
30 messages
.add_message(request
, messages
.ERROR
, "Votre compte ne permet pas d'accéder à cette partie de l'application.")
31 return HttpResponseRedirect('%s?%s=%s' % tup
)
34 def dae_groupe_requis(fn
):
36 L'accès à la plateforme nécessite d'appartenir au moins à un groupe,
37 ou d'être superuser. De cette manière l'autentification AUF fonctionnera
38 toujours, il suffit de mettre le nouvel employé dans le groupe qui le concerne.
40 def inner(request
, *args
, **kwargs
):
43 if user
.is_superuser
or user_in_dae_groupes(user
):
44 return fn(request
, *args
, **kwargs
)
46 msg
= u
"Votre compte ne permet pas d'accéder à cette partie de l'application."
47 return redirect_interdiction(request
, msg
)
51 def poste_dans_ma_region_ou_service(fn
):
53 Test si le user connecté appartient bien à la même région ou service que le poste.
55 def inner(request
, *args
, **kwargs
):
57 key
= kwargs
.get('key', None)
59 # Autoriser la création d'une nouvelle demande
61 return fn(request
, *args
, **kwargs
)
63 # Rechercher dans la demande, la région ou le service associé
65 source
, id = key
.split('-')
74 postes
= Poste
.objects
.ma_region_ou_service(user
).filter(id=id)
76 return fn(request
, *args
, **kwargs
)
78 msg
= u
"Vous n'avez pas le droit de consulter ce poste."
79 return redirect_interdiction(request
, msg
)
83 def dossier_dans_ma_region_ou_service(fn
):
85 Test si le user connecté appartient bien à la même région ou service que le poste.
87 def inner(request
, *args
, **kwargs
):
89 poste_key
= kwargs
.get('key', None)
90 dossier_id
= kwargs
.get('dossier_id', None)
92 # Si on s'intéresse à un dossier, on teste la validation avec le poste associé
93 if dossier_id
is not None:
94 dossiers
= dae
.Dossier
.objects
.ma_region_ou_service(user
).filter(id=dossier_id
)
96 return fn(request
, *args
, **kwargs
)
98 msg
= u
"Vous n'avez pas le droit de consulter ce dossier d'embauche."
99 return redirect_interdiction(request
, msg
)
101 # Autoriser la création d'une nouvelle demande
102 if poste_key
is None:
103 return fn(request
, *args
, **kwargs
)
104 # On est en train de répondre à un poste
106 return poste_dans_ma_region_ou_service(fn
)