rh.decorators au niveau project
[auf_rh_dae.git] / project / decorators.py
index 41c00dc..74c51f4 100644 (file)
@@ -10,6 +10,8 @@ from django.contrib.auth.decorators import user_passes_test
 from django.core.urlresolvers import reverse
 from django.utils.http import urlquote
 
+from project.groups import grp_drh, grp_drh2
+
 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.
@@ -19,5 +21,30 @@ def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"):
     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)
+    
+def in_drh_or_admin(user):
+    """
+    Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
+    """
+    groups = user.groups.all()
+    if user.is_superuser or \
+            grp_drh in groups or \
+            grp_drh2 in groups:
+        return True
+    else:
+        return False
+        
+def drh_or_admin_required(fn):
+    """
+    Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
+    """
+    def inner(request, *args, **kwargs):
+        user = request.user
+        if in_drh_or_admin(user):
+            return fn(request, *args, **kwargs)
 
+        msg = u"Votre compte ne permet pas d'accéder à " \
+                u"cette partie de l'application."
+        return redirect_interdiction(request, msg)
 
+    return inner