Commit 8a1d0aaaf5ad598cb3c6cdbe90447c599102177a

Authored by Zambom
1 parent fd7a26cd

Adding file to store permission functions

Showing 2 changed files with 30 additions and 0 deletions   Show diff stats
amadeus/permissions.py 0 → 100644
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
  1 +# File used to store functions to handle permissions
  2 +
  3 +"""
  4 + Function to know if a user has permission to:
  5 + - Edit Subject
  6 + - Delete Subject
  7 + - Create Topic inside Subject
  8 +"""
  9 +def has_subject_permissions(user, subject):
  10 + if user.is_staff:
  11 + return True
  12 +
  13 + if user in subject.professor.all():
  14 + return True
  15 +
  16 + if user in subject.category.coordinators.all():
  17 + return True
  18 +
  19 + return False
topics/views.py
@@ -5,6 +5,8 @@ from django.core.urlresolvers import reverse, reverse_lazy @@ -5,6 +5,8 @@ from django.core.urlresolvers import reverse, reverse_lazy
5 from django.utils.translation import ugettext_lazy as _ 5 from django.utils.translation import ugettext_lazy as _
6 from django.contrib.auth.mixins import LoginRequiredMixin 6 from django.contrib.auth.mixins import LoginRequiredMixin
7 7
  8 +from amadeus.permissions import has_subject_permissions
  9 +
8 from subjects.models import Subject 10 from subjects.models import Subject
9 11
10 from .models import Topic 12 from .models import Topic
@@ -17,6 +19,15 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): @@ -17,6 +19,15 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView):
17 template_name = 'topics/create.html' 19 template_name = 'topics/create.html'
18 form_class = TopicForm 20 form_class = TopicForm
19 21
  22 + def dispatch(self, request, *args, **kwargs):
  23 + slug = self.kwargs.get('slug', '')
  24 + subject = get_object_or_404(Subject, slug = slug)
  25 +
  26 + if not has_subject_permissions(request.user, subject):
  27 + return redirect(reverse_lazy('subjects:home'))
  28 +
  29 + return super(CreateView, self).dispatch(request, *args, **kwargs)
  30 +
20 def get_initial(self): 31 def get_initial(self):
21 initial = super(CreateView, self).get_initial() 32 initial = super(CreateView, self).get_initial()
22 33