Commit | Line | Data |
---|---|---|
e993f3dc | 1 | # -*- encoding: utf-8 -*- |
2 | """ | |
3 | Décorateurs AUF | |
4 | """ | |
e993f3dc | 5 | from django.http import HttpResponseRedirect |
02c1b3dc | 6 | from django.conf import settings |
acbc95a1 | 7 | from django.contrib import messages |
02c1b3dc | 8 | from django.contrib.auth import REDIRECT_FIELD_NAME |
acbc95a1 DB |
9 | from django.contrib.auth.decorators import user_passes_test |
10 | from django.core.urlresolvers import reverse | |
02c1b3dc | 11 | from django.utils.http import urlquote |
e993f3dc | 12 | |
ae99002a | 13 | from project.groups import grp_drh, grp_drh2, grp_correspondants_rh |
afd3be54 | 14 | from project.groups import get_employe_from_user |
ae99002a | 15 | |
02c1b3dc JPC |
16 | |
17 | def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"): | |
18 | """ | |
19 | Redirection du la page de login avec un message d'erreur. | |
20 | """ | |
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) | |
018c8eaf DB |
26 | |
27 | def in_drh_or_admin(user): | |
28 | """ | |
29 | Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin | |
30 | """ | |
31 | groups = user.groups.all() | |
32 | if user.is_superuser or \ | |
33 | grp_drh in groups or \ | |
34 | grp_drh2 in groups: | |
35 | return True | |
36 | else: | |
37 | return False | |
38 | ||
39 | def drh_or_admin_required(fn): | |
40 | """ | |
41 | Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin | |
42 | """ | |
43 | def inner(request, *args, **kwargs): | |
44 | user = request.user | |
45 | if in_drh_or_admin(user): | |
46 | return fn(request, *args, **kwargs) | |
02c1b3dc | 47 | |
018c8eaf DB |
48 | msg = u"Votre compte ne permet pas d'accéder à " \ |
49 | u"cette partie de l'application." | |
50 | return redirect_interdiction(request, msg) | |
02c1b3dc | 51 | |
018c8eaf | 52 | return inner |
ae99002a DB |
53 | |
54 | def region_protected(model): | |
55 | def wrapper(func): | |
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) | |
64 | q = Q(**{ | |
65 | model.prefix_implantation: employe.implantation.region | |
66 | }) | |
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) | |
71 | return wrapped | |
72 | return wrapper | |
82c5e37d DB |
73 | |
74 | def in_one_of_group(groups): | |
75 | """ | |
76 | Test si le user appartient au moins 1 des ces groupes | |
77 | """ | |
78 | def wrapper(fn): | |
79 | def wrapped(request, *args, **kwargs): | |
80 | user_groups = request.user.groups.all() | |
81 | for g in user_groups: | |
82 | if g in groups: | |
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) | |
86 | return wrapped | |
87 | return wrapper |