conflit réglé merge master et regionalisation
[auf_rh_dae.git] / project / decorators.py
index 74c51f4..700d158 100644 (file)
@@ -10,7 +10,9 @@ from django.contrib.auth.decorators import user_passes_test
 from django.core.urlresolvers import reverse
 from django.utils.http import urlquote
 
 from django.core.urlresolvers import reverse
 from django.utils.http import urlquote
 
-from project.groups import grp_drh, grp_drh2
+from project.groups import grp_drh, grp_drh2, grp_correspondants_rh
+from project.groups import get_employe_from_user
+
 
 def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"):
     """
 
 def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"):
     """
@@ -48,3 +50,38 @@ def drh_or_admin_required(fn):
         return redirect_interdiction(request, msg)
 
     return inner
         return redirect_interdiction(request, msg)
 
     return inner
+    
+def region_protected(model):
+    def wrapper(func):
+        def wrapped(request, id):
+            if request.user.is_superuser:
+                return func(request, id)
+            user_groups = request.user.groups.all()
+            if grp_drh in user_groups:
+                return func(request, id)
+            if grp_correspondants_rh in user_groups:
+                employe = get_employe_from_user(request.user)
+                q = Q(**{
+                    model.prefix_implantation: employe.implantation.region
+                })
+                qs = model.objects.filter(q)
+                if int(id) in [o.id for o in qs]:
+                    return func(request, id)
+            return redirect_interdiction(request)
+        return wrapped
+    return wrapper
+    
+def in_one_of_group(groups):
+    """
+    Test si le user appartient au moins 1 des ces groupes
+    """
+    def wrapper(fn):
+        def wrapped(request, *args, **kwargs):
+            user_groups = request.user.groups.all()
+            for g in user_groups:
+                if g in groups:
+                    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 wrapped
+    return wrapper