[FEAT] Limit Map and Network views to admins

This commit is contained in:
2023-03-25 13:54:55 +00:00
parent e37d5fcb61
commit 21088a1412
5 changed files with 19 additions and 16 deletions

View File

@@ -104,15 +104,15 @@
<a href="{% url 'activities:activity.list' %}" class="nav-link">Activities</a>
</li>
<li class="nav-item">
<a href="{% url 'people:map' %}" class="nav-link">Map</a>
</li>
<li class="nav-item">
<a href="{% url 'people:network' %}" class="nav-link">Network</a>
</li>
{% if request.user.is_superuser %}
<li class="nav-item">
<a href="{% url 'people:map' %}" class="nav-link">Map</a>
</li>
<li class="nav-item">
<a href="{% url 'people:network' %}" class="nav-link">Network</a>
</li>
<li class="nav-item">
<a href="{% url 'export:index' %}" class="nav-link">Export</a>
</li>

View File

@@ -9,6 +9,8 @@ from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse
from django.views.generic import TemplateView
from django.views.generic.edit import UpdateView
from django.contrib.auth.mixins import UserPassesTestMixin
import typing
from . import forms
@@ -19,6 +21,10 @@ class IndexView(TemplateView):
# Template set in Django settings file - may be customised by a customisation app
template_name = settings.TEMPLATE_NAME_INDEX
class UserIsStaffMixin(UserPassesTestMixin):
def test_func(self) -> typing.Optional[bool]:
return self.request.user.is_staff
class ConsentTextView(LoginRequiredMixin, UpdateView):
"""View with consent text and form for users to indicate consent."""

View File

@@ -1,21 +1,16 @@
import csv
import typing
from django.contrib.auth.mixins import UserPassesTestMixin
from django.http import HttpResponse
from django.views.generic import TemplateView
from django.views.generic.list import BaseListView
from breccia_mapper.views import UserIsStaffMixin
class QuotedCsv(csv.excel):
quoting = csv.QUOTE_NONNUMERIC
class UserIsStaffMixin(UserPassesTestMixin):
def test_func(self) -> typing.Optional[bool]:
return self.request.user.is_staff
class CsvExportView(UserIsStaffMixin, BaseListView):
model = None
serializer_class = None

View File

@@ -7,6 +7,7 @@ from django.utils import timezone
from django.views.generic import TemplateView
from people import forms, models, permissions
from breccia_mapper.views import UserIsStaffMixin
def get_map_data(obj: typing.Union[models.Person, models.Organisation]) -> typing.Dict[str, typing.Any]:
@@ -33,7 +34,7 @@ def get_map_data(obj: typing.Union[models.Person, models.Organisation]) -> typin
}
class MapView(LoginRequiredMixin, TemplateView):
class MapView(UserIsStaffMixin, LoginRequiredMixin, TemplateView):
"""View displaying a map of :class:`Person` and :class:`Organisation` locations."""
template_name = 'people/map.html'

View File

@@ -11,6 +11,7 @@ from django.utils import timezone
from django.views.generic import TemplateView
from people import forms, models, serializers
from breccia_mapper.views import UserIsStaffMixin
logger = logging.getLogger(__name__) # pylint: disable=invalid-name
@@ -57,7 +58,7 @@ filter_people = filter_by_form_answers(
)
class NetworkView(LoginRequiredMixin, TemplateView):
class NetworkView(UserIsStaffMixin, LoginRequiredMixin, TemplateView):
"""View to display relationship network."""
template_name = 'people/network.html'