Ajout des permissions pour accéder aux rapports
authorJean-Philippe Caissy <jean-philippe.caissy@auf.org>
Thu, 26 Jan 2012 15:47:49 +0000 (09:47 -0600)
committerJean-Philippe Caissy <jean-philippe.caissy@auf.org>
Thu, 26 Jan 2012 15:47:49 +0000 (09:47 -0600)
project/decorators.py
project/rh/decorators.py [new file with mode: 0644]
project/rh/views.py

index 03430bf..87ba763 100644 (file)
@@ -6,6 +6,10 @@ from django.contrib.auth.decorators import user_passes_test
 from django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect
 from permissions import is_employe, is_admin
+from django.conf import settings
+from django.contrib.auth import REDIRECT_FIELD_NAME
+from django.utils.http import urlquote
+from django.contrib import messages
 
 # Décorateurs des fonctions dans views (pour tester permissions dans views)
     
@@ -15,11 +19,17 @@ def admin_required(fn):
         if is_admin(user):
             return fn(request, *args, **kwargs)
         else :
-            from django.conf import settings
-            from django.contrib.auth import REDIRECT_FIELD_NAME
-            from django.utils.http import urlquote
-            login_url = settings.LOGIN_URL
-            path = urlquote(request.get_full_path())
-            tup = login_url, REDIRECT_FIELD_NAME, path
-            return HttpResponseRedirect('%s?%s=%s' % tup)
+            return redirect_interdiction(request)
     return inner
+
+def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"):
+    """
+    Redirection du la page de login avec un message d'erreur.
+    """
+    login_url = settings.LOGIN_URL
+    path = urlquote(request.get_full_path())
+    tup = login_url, REDIRECT_FIELD_NAME, path
+    messages.add_message(request, messages.ERROR, "Votre compte ne permet pas d'accéder à cette partie de l'application.")
+    return HttpResponseRedirect('%s?%s=%s' % tup)
+
+
diff --git a/project/rh/decorators.py b/project/rh/decorators.py
new file mode 100644 (file)
index 0000000..091be82
--- /dev/null
@@ -0,0 +1,21 @@
+# -*- encoding: utf-8 -*-
+from rh.groups import grp_drh 
+from project.decorators import redirect_interdiction
+
+def drh_or_admin_required(fn):
+    """
+    Teste si un user Django fait parti du groupe DRH ou s'il est admin
+    """
+    def inner(request, *args, **kwargs):
+        user = request.user
+        if user.is_superuser:
+            return fn(request, *args, **kwargs)
+
+        for g in user.groups.all():
+            if g in grp_drh:
+                return fn(request, *args, **kwargs)
+
+        msg = u"Votre compte ne permet pas d'accéder à cette partie de l'application."
+        return redirect_interdiction(request, msg)
+
+    return inner
index b9f3414..718eac7 100644 (file)
@@ -13,6 +13,7 @@ from project.lib import get_employe_from_id
 
 from rh import models as rh
 from rh.lib import calc_remun
+from rh.decorators import drh_or_admin_required
 
 # pas de reference a DAE devrait etre refactorisé
 from dae.utils import get_employe_from_user
@@ -81,6 +82,7 @@ def employe(request, id):
 # Rapports
 
 @login_required
+@drh_or_admin_required
 def rapports_poste(request):
 
     lookup_params = dict(request.GET.items())
@@ -136,7 +138,8 @@ def rapports_poste(request):
 
     return render_to_response('rh/rapports/postes.html', c, RequestContext(request))
 
-
+@login_required
+@drh_or_admin_required
 def rapports_contrat(request):
 
     lookup_params = dict(request.GET.items())
@@ -159,6 +162,8 @@ def rapports_contrat(request):
     return render_to_response('rh/rapports/contrats.html', c, RequestContext(request))
 
 
+@login_required
+@drh_or_admin_required
 def rapports_remuneration(request):
 
     lookup_params = dict(request.GET.items())