Commit d2acecc921f37ef978f550602103d48dcc257ab8
1 parent
fdd2a50b
Exists in
master
and in
5 other branches
Resolving url permissions [Issues: #192 & #195]
Showing
4 changed files
with
58 additions
and
2 deletions
Show diff stats
courses/permissions.py
... | ... | @@ -2,6 +2,19 @@ from rolepermissions.permissions import register_object_checker |
2 | 2 | from amadeus.roles import SystemAdmin |
3 | 3 | |
4 | 4 | @register_object_checker() |
5 | +def view_topic(role, user, topic): | |
6 | + if (role == SystemAdmin): | |
7 | + return True | |
8 | + | |
9 | + if (user in topic.subject.course.professors.all() and user in topic.subject.professors.all()): | |
10 | + return True | |
11 | + | |
12 | + if (user in topic.subject.course.students.all() and user in topic.subject.students.all()): | |
13 | + return True | |
14 | + | |
15 | + return False | |
16 | + | |
17 | +@register_object_checker() | |
5 | 18 | def edit_topic(role, user, topic): |
6 | 19 | if (role == SystemAdmin): |
7 | 20 | return True |
... | ... | @@ -12,6 +25,19 @@ def edit_topic(role, user, topic): |
12 | 25 | return False |
13 | 26 | |
14 | 27 | @register_object_checker() |
28 | +def view_subject(role, user, subject): | |
29 | + if (role == SystemAdmin): | |
30 | + return True | |
31 | + | |
32 | + if (user in subject.course.professors.all() and user in subject.professors.all()): | |
33 | + return True | |
34 | + | |
35 | + if (user in subject.course.students.all() and user in subject.students.all()): | |
36 | + return True | |
37 | + | |
38 | + return False | |
39 | + | |
40 | +@register_object_checker() | |
15 | 41 | def edit_subject(role, user, subject): |
16 | 42 | if (role == SystemAdmin): |
17 | 43 | return True | ... | ... |
courses/templates/course/view.html
... | ... | @@ -157,7 +157,7 @@ |
157 | 157 | <p><b>{% trans "End" %}: </b>{{subject.end_date}}</p> |
158 | 158 | </div> |
159 | 159 | </div> |
160 | - <a href="{% url 'course:view_subject' subject.slug %}" class="btn btn-raised btn-default center-block view_btn" {% if user|show_subject_subscribe:subject %}style="display:none"{% endif %}>{% trans 'View Subject' %}<div class="ripple-container"></div></a> | |
160 | + <a href="{% url 'course:view_subject' subject.slug %}" class="btn btn-raised btn-default center-block view_btn" {% if user|hide_subscribe_view_btn:subject %}style="display:none"{% endif %}>{% trans 'View Subject' %}<div class="ripple-container"></div></a> | |
161 | 161 | </div> |
162 | 162 | </div> |
163 | 163 | {% endfor %} |
... | ... | @@ -209,7 +209,7 @@ |
209 | 209 | <p><b>{% trans "End" %}: </b>{{subject.end_date}}</p> |
210 | 210 | </div> |
211 | 211 | </div> |
212 | - <a href="{% url 'course:view_subject' subject.slug %}" class="btn btn-raised btn-default center-block view_btn" {% if user|show_subject_subscribe:subject %}style="display:none"{% endif %}>{% trans 'View Subject' %}<div class="ripple-container"></div></a> | |
212 | + <a href="{% url 'course:view_subject' subject.slug %}" class="btn btn-raised btn-default center-block view_btn" {% if user|hide_subscribe_view_btn:subject %}style="display:none"{% endif %}>{% trans 'View Subject' %}<div class="ripple-container"></div></a> | |
213 | 213 | </div> |
214 | 214 | </div> |
215 | 215 | {% endif %} | ... | ... |
courses/templatetags/custom_filters.py
... | ... | @@ -4,6 +4,19 @@ from rolepermissions.verifications import has_role |
4 | 4 | register = template.Library() |
5 | 5 | |
6 | 6 | @register.filter |
7 | +def hide_subscribe_view_btn(user, subject): | |
8 | + if not user is None: | |
9 | + if user.is_authenticated: | |
10 | + if has_role(user, 'student') and not user.is_staff: | |
11 | + if user in subject.course.students.all(): | |
12 | + if not user in subject.students.all(): | |
13 | + return True | |
14 | + else: | |
15 | + return True | |
16 | + | |
17 | + return False | |
18 | + | |
19 | +@register.filter | |
7 | 20 | def show_subject_subscribe(user, subject): |
8 | 21 | if not user is None: |
9 | 22 | if user.is_authenticated: | ... | ... |
courses/views.py
... | ... | @@ -210,6 +210,7 @@ class CourseView( NotificationMixin, generic.DetailView): |
210 | 210 | courses = None |
211 | 211 | context = super(CourseView, self).get_context_data(**kwargs) |
212 | 212 | course = get_object_or_404(Course, slug = self.kwargs.get('slug')) |
213 | + | |
213 | 214 | if has_role(self.request.user,'system_admin'): |
214 | 215 | subjects = course.subjects.all() |
215 | 216 | elif has_role(self.request.user,'professor'): |
... | ... | @@ -381,6 +382,14 @@ class SubjectsView(LoginRequiredMixin, generic.ListView): |
381 | 382 | context_object_name = 'subjects' |
382 | 383 | model = Subject |
383 | 384 | |
385 | + def dispatch(self, *args, **kwargs): | |
386 | + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | |
387 | + | |
388 | + if(not has_object_permission('view_subject', self.request.user, subject)): | |
389 | + return self.handle_no_permission() | |
390 | + | |
391 | + return super(SubjectsView, self).dispatch(*args, **kwargs) | |
392 | + | |
384 | 393 | def get_queryset(self): |
385 | 394 | subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) |
386 | 395 | course = subject.course |
... | ... | @@ -428,6 +437,14 @@ class TopicsView(LoginRequiredMixin, generic.ListView): |
428 | 437 | context_object_name = 'topics' |
429 | 438 | model = Topic |
430 | 439 | |
440 | + def dispatch(self, *args, **kwargs): | |
441 | + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | |
442 | + | |
443 | + if(not has_object_permission('view_topic', self.request.user, topic)): | |
444 | + return self.handle_no_permission() | |
445 | + | |
446 | + return super(TopicsView, self).dispatch(*args, **kwargs) | |
447 | + | |
431 | 448 | def get_queryset(self): |
432 | 449 | topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) |
433 | 450 | subject = topic.subject | ... | ... |