Commit 60e361bf092bd230cf89726fba602a26300b8bde

Authored by Felipe Henrique de Almeida Bormann
1 parent 56cc5632

added fast checking to views, still has the delete view to work on, then all views are protected

Showing 1 changed file with 53 additions and 4 deletions   Show diff stats
subjects/views.py
@@ -176,12 +176,40 @@ class SubjectCreateView(LoginRequiredMixin, CreateView): @@ -176,12 +176,40 @@ class SubjectCreateView(LoginRequiredMixin, CreateView):
176 176
177 success_url = reverse_lazy('subject:index') 177 success_url = reverse_lazy('subject:index')
178 178
  179 + def dispatch(self, request, *args, **kwargs):
  180 + user = request.user
  181 + pk = user.pk
  182 + if kwargs.get('subject_slug'):
  183 + Subject.objects.filter((Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('subject_slug')))
  184 + if not user.is_staff:
  185 + if subject.count() == 0:
  186 + if request.META.get('HTTP_REFERER'):
  187 + return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
  188 + else:
  189 + return redirect('subjects:index')
  190 +
  191 +
  192 + if kwargs.get('slug'):
  193 + subject = Subject.objects.filter((Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('slug')))
  194 + if not user.is_staff:
  195 + if subject.count() == 0:
  196 + if request.META.get('HTTP_REFERER'):
  197 + return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
  198 + else:
  199 + return redirect('subjects:index')
  200 + if request.method.lower() in self.http_method_names:
  201 + handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
  202 + else:
  203 + handler = self.http_method_not_allowed
  204 + return handler(request, *args, **kwargs)
  205 +
  206 +
179 def get_initial(self): 207 def get_initial(self):
180 initial = super(SubjectCreateView, self).get_initial() 208 initial = super(SubjectCreateView, self).get_initial()
181 if self.kwargs.get('slug'): #when the user creates a subject 209 if self.kwargs.get('slug'): #when the user creates a subject
182 initial['category'] = Category.objects.all().filter(slug=self.kwargs['slug']) 210 initial['category'] = Category.objects.all().filter(slug=self.kwargs['slug'])
183 211
184 - if self.kwargs.get('subject_slug'): #when the user updates a subject 212 + if self.kwargs.get('subject_slug'): #when the user replicate a subject
185 subject = get_object_or_404(Subject, slug = self.kwargs['subject_slug']) 213 subject = get_object_or_404(Subject, slug = self.kwargs['subject_slug'])
186 initial = initial.copy() 214 initial = initial.copy()
187 initial['category'] = subject.category 215 initial['category'] = subject.category
@@ -249,11 +277,12 @@ class SubjectUpdateView(LoginRequiredMixin, LogMixin, UpdateView): @@ -249,11 +277,12 @@ class SubjectUpdateView(LoginRequiredMixin, LogMixin, UpdateView):
249 277
250 def dispatch(self, request, *args, **kwargs): 278 def dispatch(self, request, *args, **kwargs):
251 user = self.request.user 279 user = self.request.user
252 - subject = get_object_or_404(Subject, slug = kwargs['slug'])  
253 280
254 - if not user.is_staff:  
255 - if not user in subject.professor.all() and not user in subject.category.coordinators.all(): 281 + pk = user.pk
256 282
  283 + subject = Subject.objects.filter((Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('slug')))
  284 + if not user.is_staff:
  285 + if subject.count() == 0:
257 if request.META.get('HTTP_REFERER'): 286 if request.META.get('HTTP_REFERER'):
258 return HttpResponseRedirect(request.META.get('HTTP_REFERER')) 287 return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
259 else: 288 else:
@@ -334,6 +363,26 @@ class SubjectDetailView(LoginRequiredMixin, DetailView): @@ -334,6 +363,26 @@ class SubjectDetailView(LoginRequiredMixin, DetailView):
334 template_name = 'subjects/view.html' 363 template_name = 'subjects/view.html'
335 context_object_name = 'subject' 364 context_object_name = 'subject'
336 365
  366 + def dispatch(self, request, *args,**kwargs):
  367 + user = request.user
  368 + pk = user.pk
  369 + if kwargs.get('slug') and not user.is_staff:
  370 + subject = get_object_or_404(Subject, slug = kwargs.get('slug'))
  371 +
  372 + subject = Subject.objects.filter((Q(students__pk=pk) | Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('slug')))
  373 +
  374 + if subject.count() == 0:
  375 + if request.META.get('HTTP_REFERER'):
  376 + return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
  377 + else:
  378 + return redirect('subjects:home')
  379 +
  380 + if request.method.lower() in self.http_method_names:
  381 + handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
  382 + else:
  383 + handler = self.http_method_not_allowed
  384 + return handler(request, *args, **kwargs)
  385 +
337 def get_context_data(self, **kwargs): 386 def get_context_data(self, **kwargs):
338 context = super(SubjectDetailView, self).get_context_data(**kwargs) 387 context = super(SubjectDetailView, self).get_context_data(**kwargs)
339 context['title'] = self.object.name 388 context['title'] = self.object.name