acces securise aux fichiers
[auf_rh_dae.git] / project / dae / views.py
index b8dae9e..11a6e10 100644 (file)
@@ -11,6 +11,7 @@ import warnings
 from django.core.urlresolvers import reverse
 from django.http import Http404, HttpResponse, HttpResponseGone
 from django.shortcuts import redirect, render_to_response, get_object_or_404
 from django.core.urlresolvers import reverse
 from django.http import Http404, HttpResponse, HttpResponseGone
 from django.shortcuts import redirect, render_to_response, get_object_or_404
+from django.views.static import serve
 from django.template import Context, RequestContext
 from django.template.loader import get_template
 from django.contrib import messages
 from django.template import Context, RequestContext
 from django.template.loader import get_template
 from django.contrib import messages
@@ -30,6 +31,7 @@ from decorators import dae_groupe_requis, \
                        poste_est_modifiable
 from forms import *
 from workflow import POSTE_ETAT_DRH_FINALISATION, DOSSIER_ETAT_REFUSE
                        poste_est_modifiable
 from forms import *
 from workflow import POSTE_ETAT_DRH_FINALISATION, DOSSIER_ETAT_REFUSE
+from decorators import redirect_interdiction
 
 def devises():
     liste = []
 
 def devises():
     liste = []
@@ -668,3 +670,28 @@ def liste_valeurs_point(request):
         data.append({'id' : o.id, 'label' : o.__unicode__(), })
     return HttpResponse(dumps(data))
 
         data.append({'id' : o.id, 'label' : o.__unicode__(), })
     return HttpResponse(dumps(data))
 
+################################################################################
+# MEDIA PRIVE
+################################################################################
+
+def mediaserve(request, path, document_root=None, show_indexes=False):
+    """
+    Sécuriser l'accès aux fichiers uploadés
+    """
+    ct, id, filename = path.split('/')
+
+    grant_ok = False
+    user = request.user
+    if not user.is_authenticated():
+        return redirect_interdiction(request)
+
+    if ct == 'poste':
+        grant_ok = dae.Poste.objects.ma_region_ou_service(user).filter(id=id).count() > 0
+    if ct == 'dossier':
+        grant_ok = dae.Dossier.objects.ma_region_ou_service(user).filter(id=id).count() > 0
+
+    if not grant_ok:
+        return redirect_interdiction(request)
+
+    return serve(request, path, document_root, show_indexes)
+