Commit | Line | Data |
---|---|---|
5633fa41 OL |
1 | # -*- encoding: utf-8 -*- |
2 | ||
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 | |
f4928bf5 | 7 | from workflow import dae_groupes |
5633fa41 OL |
8 | from project.dae import models as dae |
9 | from project.rh_v1 import models as rh | |
10 | ||
11 | def user_in_dae_groupes(user): | |
12 | """ | |
13 | Teste si un user Django fait parti des groupes prédéfinis de DAE. | |
14 | """ | |
15 | for g in user.groups.all(): | |
16 | if g in dae_groupes: | |
17 | return True | |
18 | return False | |
19 | ||
20 | def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"): | |
21 | """ | |
22 | Redirection du la page de login avec un message d'erreur. | |
23 | """ | |
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) | |
32 | ||
33 | ||
34 | def dae_groupe_requis(fn): | |
35 | """ | |
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. | |
39 | """ | |
40 | def inner(request, *args, **kwargs): | |
41 | user = request.user | |
42 | ||
43 | if user.is_superuser or user_in_dae_groupes(user): | |
44 | return fn(request, *args, **kwargs) | |
45 | else : | |
46 | msg = u"Votre compte ne permet pas d'accéder à cette partie de l'application." | |
47 | return redirect_interdiction(request, msg) | |
48 | return inner | |
49 | ||
50 | ||
51 | def poste_dans_ma_region_ou_service(fn): | |
52 | """ | |
53 | Test si le user connecté appartient bien à la même région ou service que le poste. | |
54 | """ | |
55 | def inner(request, *args, **kwargs): | |
56 | user = request.user | |
57 | key = kwargs.get('key', None) | |
f4928bf5 OL |
58 | |
59 | # Autoriser la création d'une nouvelle demande | |
60 | if key is None: | |
61 | return fn(request, *args, **kwargs) | |
62 | ||
63 | # Rechercher dans la demande, la région ou le service associé | |
5633fa41 OL |
64 | try: |
65 | source, id = key.split('-') | |
66 | if source == 'dae': | |
67 | Poste = dae.Poste | |
68 | if source == 'rh': | |
69 | Poste = rh.Poste | |
70 | except: | |
71 | id = key | |
72 | Poste = dae.Poste | |
73 | ||
74 | postes = Poste.objects.ma_region_ou_service(user).filter(id=id) | |
5633fa41 OL |
75 | if len(postes) > 0: |
76 | return fn(request, *args, **kwargs) | |
77 | else : | |
78 | msg = u"Vous n'avez pas le droit de consulter ce poste." | |
79 | return redirect_interdiction(request, msg) | |
80 | return inner | |
81 | ||
82 | ||
62d3903d OL |
83 | def dossier_dans_ma_region_ou_service(fn): |
84 | """ | |
85 | Test si le user connecté appartient bien à la même région ou service que le poste. | |
86 | """ | |
87 | def inner(request, *args, **kwargs): | |
88 | user = request.user | |
89 | poste_key = kwargs.get('key', None) | |
90 | dossier_id = kwargs.get('dossier_id', None) | |
91 | ||
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) | |
95 | if len(dossiers) > 0: | |
96 | return fn(request, *args, **kwargs) | |
97 | else : | |
98 | msg = u"Vous n'avez pas le droit de consulter ce dossier d'embauche." | |
99 | return redirect_interdiction(request, msg) | |
100 | ||
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 | |
105 | else: | |
dcc1c26c | 106 | return poste_dans_ma_region_ou_service(fn)(request, *args, **kwargs) |
62d3903d | 107 | return inner |