from django.core.urlresolvers import reverse
from django.utils.http import urlquote
+from project.groups import grp_drh, grp_drh2, grp_correspondants_rh
+from project.utils import get_employe_from_user
+
+
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.
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
+
+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