Commit 02d981adc42c751637025b083044affc379213a2
1 parent
51979fee
Exists in
master
and in
3 other branches
Adding webpage access control
Showing
2 changed files
with
46 additions
and
1 deletions
Show diff stats
amadeus/permissions.py
1 | 1 | # File used to store functions to handle permissions |
2 | 2 | |
3 | +from topics.models import Resource | |
4 | + | |
3 | 5 | """ |
4 | 6 | Function to know if a user has permission to: |
5 | 7 | - Edit Subject |
... | ... | @@ -17,3 +19,28 @@ def has_subject_permissions(user, subject): |
17 | 19 | return True |
18 | 20 | |
19 | 21 | return False |
22 | + | |
23 | +""" | |
24 | + Function to know if user has permission to: | |
25 | + - Access Resource | |
26 | +""" | |
27 | +def has_resource_permissions(user, resource): | |
28 | + if has_subject_permissions(user, resource.topic.subject): | |
29 | + return True | |
30 | + | |
31 | + if resource.visible or resource.topic.repository: | |
32 | + if resource.all_students: | |
33 | + if subject.students.filter(id = user.id).exists(): | |
34 | + return True | |
35 | + | |
36 | + if resource.students.filter(id = user.id).exists(): | |
37 | + return True | |
38 | + | |
39 | + if Resource.objects.filter(id = resource.id, groups__participants__pk = user.pk).exists(): | |
40 | + return True | |
41 | + | |
42 | + return False | |
43 | + | |
44 | + | |
45 | + | |
46 | + | ... | ... |
webpage/views.py
... | ... | @@ -5,7 +5,7 @@ from django.core.urlresolvers import reverse, reverse_lazy |
5 | 5 | from django.utils.translation import ugettext_lazy as _ |
6 | 6 | from django.contrib.auth.mixins import LoginRequiredMixin |
7 | 7 | |
8 | -from amadeus.permissions import has_subject_permissions | |
8 | +from amadeus.permissions import has_subject_permissions, has_resource_permissions | |
9 | 9 | |
10 | 10 | from topics.models import Topic |
11 | 11 | |
... | ... | @@ -20,6 +20,15 @@ class NewWindowView(LoginRequiredMixin, generic.DetailView): |
20 | 20 | model = Webpage |
21 | 21 | context_object_name = 'webpage' |
22 | 22 | |
23 | + def dispatch(self, request, *args, **kwargs): | |
24 | + slug = self.kwargs.get('slug', '') | |
25 | + webpage = get_object_or_404(Webpage, slug = slug) | |
26 | + | |
27 | + if not has_resource_permissions(request.user, webpage): | |
28 | + return redirect(reverse_lazy('subjects:home')) | |
29 | + | |
30 | + return super(NewWindowView, self).dispatch(request, *args, **kwargs) | |
31 | + | |
23 | 32 | class InsideView(LoginRequiredMixin, generic.DetailView): |
24 | 33 | login_url = reverse_lazy("users:login") |
25 | 34 | redirect_field_name = 'next' |
... | ... | @@ -28,6 +37,15 @@ class InsideView(LoginRequiredMixin, generic.DetailView): |
28 | 37 | model = Webpage |
29 | 38 | context_object_name = 'webpage' |
30 | 39 | |
40 | + def dispatch(self, request, *args, **kwargs): | |
41 | + slug = self.kwargs.get('slug', '') | |
42 | + webpage = get_object_or_404(Webpage, slug = slug) | |
43 | + | |
44 | + if not has_resource_permissions(request.user, webpage): | |
45 | + return redirect(reverse_lazy('subjects:home')) | |
46 | + | |
47 | + return super(InsideView, self).dispatch(request, *args, **kwargs) | |
48 | + | |
31 | 49 | def get_context_data(self, **kwargs): |
32 | 50 | context = super(InsideView, self).get_context_data(**kwargs) |
33 | 51 | ... | ... |