Skip to content

Commit 0c02af8

Browse files
committed
Stop volunteers from accessing admin urls.
Fixes #325
1 parent 3804832 commit 0c02af8

File tree

4 files changed

+18
-8
lines changed

4 files changed

+18
-8
lines changed

vms/administrator/utils.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from functools import wraps
2+
from django.shortcuts import render
3+
4+
def admin_required(func):
5+
@wraps(func)
6+
def wrapped_view(request, *args, **kwargs):
7+
admin = hasattr(request.user, 'administrator')
8+
if not admin:
9+
return render(request, 'vms/no_admin_rights.html', status=403)
10+
return func(request, *args, **kwargs)
11+
return wrapped_view

vms/administrator/views.py

+4-7
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,17 @@
1313
from django.views.generic.edit import FormView, UpdateView
1414
from django.views.generic import View
1515
from administrator.models import Administrator
16+
from administrator.utils import admin_required
1617
from django.utils.decorators import method_decorator
1718

1819

1920
class AdministratorLoginRequiredMixin(object):
2021

2122
@method_decorator(login_required)
2223
def dispatch(self, request, *args, **kwargs):
23-
user = request.user
24-
admin = None
25-
try:
26-
admin = user.administrator
27-
except ObjectDoesNotExist:
28-
pass
24+
admin = hasattr(request.user, 'administrator')
2925
if not admin:
30-
return render(request, 'vms/no_admin_rights.html')
26+
return render(request, 'vms/no_admin_rights.html', status=403)
3127
else:
3228
return super(AdministratorLoginRequiredMixin, self).dispatch(request, *args, **kwargs)
3329

@@ -81,6 +77,7 @@ def post(self, request, *args, **kwargs):
8177

8278

8379
@login_required
80+
@admin_required
8481
def settings(request):
8582
user = request.user
8683
admin = None

vms/registration/views.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from administrator.models import *
1717

1818

19-
class AdministratorSignupView(TemplateView):
19+
class AdministratorSignupView(AnonymousRequiredMixin, TemplateView):
2020
"""
2121
Administrator and Volunteer signup is implemented as a TemplateView that
2222
displays the signup form.

vms/volunteer/views.py

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from django.views.generic.detail import DetailView
1111
from django.views.generic import ListView
1212
from braces.views import LoginRequiredMixin, AnonymousRequiredMixin
13+
from administrator.utils import admin_required
1314
from organization.services import *
1415
from shift.services import *
1516
from event.services import get_signed_up_events_for_volunteer
@@ -162,6 +163,7 @@ def post(self, request, *args, **kwargs):
162163
'job_list': job_list, 'event_list': event_list, 'selected_event': event_name,
163164
'selected_job': job_name})
164165
@login_required
166+
@admin_required
165167
def search(request):
166168
if request.method == 'POST':
167169
form = SearchVolunteerForm(request.POST)

0 commit comments

Comments
 (0)