From 0940388c67f17c3061e3d5f55861ee82646c9561 Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Wed, 20 Feb 2019 05:03:51 +0100
Subject: [PATCH] Add viewing permissions for SubsidyAttachment

---
 finances/models.py | 6 ++++++
 finances/views.py  | 4 +++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/finances/models.py b/finances/models.py
index cd3c7012e..3776c57fd 100644
--- a/finances/models.py
+++ b/finances/models.py
@@ -71,6 +71,12 @@ class SubsidyAttachment(models.Model):
         if self.subsidy:
             return reverse('finances:subsidy_attachment', args=(self.subsidy.id, self.id))
 
+    def visible_to_user(self, current_user):
+        if self.publicly_visible or current_user.has_perm('scipost.can_manage_subsidies'):
+            return True
+        if self.subsidy.organization.contactrole_set.filter(contact__user=current_user).exists():
+            return True
+        return False
 
 
 ###########################
diff --git a/finances/views.py b/finances/views.py
index 3cd4089fd..544e7fa0b 100644
--- a/finances/views.py
+++ b/finances/views.py
@@ -7,6 +7,7 @@ import mimetypes
 from django.contrib import messages
 from django.contrib.auth.decorators import permission_required
 from django.contrib.auth.mixins import LoginRequiredMixin
+from django.core.exceptions import PermissionDenied
 from django.core.urlresolvers import reverse_lazy
 from django.http import Http404, HttpResponse
 from django.shortcuts import get_object_or_404, render
@@ -83,7 +84,8 @@ class SubsidyDetailView(DetailView):
 def subsidy_attachment(request, subsidy_id, attachment_id):
     attachment = get_object_or_404(SubsidyAttachment.objects,
                                    subsidy__id=subsidy_id, id=attachment_id)
-
+    if not attachment.visible_to_user(request.user):
+        return PermissionDenied
     content_type, encoding = mimetypes.guess_type(attachment.attachment.path)
     content_type = content_type or 'application/octet-stream'
     response = HttpResponse(attachment.attachment.read(), content_type=content_type)
-- 
GitLab