securisation de toutes les vues
[auf_rh_dae.git] / project / dae / decorators.py
index 55c940a..a927fef 100644 (file)
@@ -72,7 +72,6 @@ def poste_dans_ma_region_ou_service(fn):
             Poste = dae.Poste
 
         postes = Poste.objects.ma_region_ou_service(user).filter(id=id)
-        print postes
         if len(postes) > 0:
             return fn(request, *args, **kwargs)
         else :
@@ -81,3 +80,45 @@ def poste_dans_ma_region_ou_service(fn):
     return inner
 
 
+def dossier_dans_ma_region_ou_service(fn):
+    """
+    Test si le user connecté appartient bien à la même région ou service que le poste.
+    """
+    def inner(request, *args, **kwargs):
+        user = request.user
+        poste_key = kwargs.get('key', None)
+        dossier_id = kwargs.get('dossier_id', None)
+
+        # Si on s'intéresse à un dossier, on teste la validation avec le poste associé
+        if dossier_id is not None:
+            dossiers = dae.Dossier.objects.ma_region_ou_service(user).filter(id=dossier_id)
+            if len(dossiers) > 0:
+                return fn(request, *args, **kwargs)
+            else :
+                msg = u"Vous n'avez pas le droit de consulter ce dossier d'embauche."
+                return redirect_interdiction(request, msg)
+
+        # Autoriser la création d'une nouvelle demande
+        if poste_key is None:
+            return fn(request, *args, **kwargs)
+        # On est en train de répondre à un poste
+        else:
+            return poste_dans_ma_region_ou_service(fn)(request, *args, **kwargs)
+    return inner
+
+def employe_dans_ma_region_ou_service(fn):
+    """
+    Test d'accès à un employé
+    """
+    def inner(request, *args, **kwargs):
+        from project.dae.forms import _employe_choices
+        liste_employes = _employe_choices(None, request)
+        autorises = [k for k, nom in liste_employes]
+        employe_key = kwargs.get('employe_key')
+        if employe_key in autorises:
+            return fn(request, *args, **kwargs)
+        else :
+            msg = u"Vous n'avez pas le droit de consulter cet employé."
+            return redirect_interdiction(request, msg)
+        
+    return inner