Multiples zones par user implémenté
[auf_rh_dae.git] / project / decorators.py
index 00b8c59..0424878 100644 (file)
@@ -10,7 +10,6 @@ from django.db.models import Q
 from django.utils.http import urlquote
 
 from project import groups
-from project.groups import get_employe_from_user
 
 
 def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"):
@@ -31,10 +30,10 @@ def in_drh_or_admin(user):
     """
     Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
     """
-    user_groups = user.groups.all()
+    user_groups = [g.name for g in user.groups.all()]
     if user.is_superuser or \
-            groups.grp_drh in user_groups or \
-            groups.grp_drh2 in user_groups:
+            groups.DRH_NIVEAU_1 in user_groups or \
+            groups.DRH_NIVEAU_2 in user_groups:
         return True
     else:
         return False
@@ -61,31 +60,31 @@ def region_protected(model):
         def wrapped(request, id):
             if request.user.is_superuser:
                 return func(request, id)
-            user_groups = request.user.groups.all()
-            if groups.grp_drh in user_groups or \
-               groups.grp_drh2 in user_groups:
+            user_groups = [g.name for g in request.user.groups.all()]
+            if groups.DRH_NIVEAU_1 in user_groups or \
+               groups.DRH_NIVEAU_2 in user_groups:
                 return func(request, id)
-            if groups.grp_correspondants_rh in user_groups or \
-               groups.grp_administrateurs in user_groups or \
-               groups.grp_directeurs_bureau in user_groups:
-                employe = get_employe_from_user(request.user)
-                q = Q(**{
-                    model.prefix_implantation: employe.implantation.region
-                })
+            if groups.CORRESPONDANT_RH in user_groups or \
+               groups.ADMINISTRATEURS in user_groups or \
+               groups.DIRECTEUR_DE_BUREAU in user_groups:
+                zones = groups.get_zones_from_user(request.user)
+                qkey = '%s__in' % model.prefix_implantation
+                q = Q(**{ qkey: zones })
                 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()
+            user_groups = [g.name for g in request.user.groups.all()]
             for g in user_groups:
                 if g in groups:
                     return fn(request, *args, **kwargs)