Commit 4048e383 by Waheed Ahmed

Course edit button permission.

ECOM-6045
parent 092261dc
# -*- coding: utf-8 -*-
# Generated by Django 1.9.11 on 2017-01-05 16:26
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('publisher', '0023_auto_20161228_1350'),
]
operations = [
migrations.AlterModelOptions(
name='organizationextension',
options={'get_latest_by': 'modified', 'ordering': ('-modified', '-created'), 'permissions': (('publisher_edit_course', 'Can edit course'), ('publisher_edit_course_run', 'Can edit course run'), ('publisher_view_course', 'Can view course'), ('publisher_view_course_run', 'Can view the course run'))},
),
]
...@@ -428,7 +428,8 @@ class CourseUserRole(TimeStampedModel, ChangedByMixin): ...@@ -428,7 +428,8 @@ class CourseUserRole(TimeStampedModel, ChangedByMixin):
class OrganizationExtension(TimeStampedModel): class OrganizationExtension(TimeStampedModel):
""" Organization-Extension relation model. """ """ Organization-Extension relation model. """
EDIT_COURSE_RUN = 'edit_course_run' EDIT_COURSE = 'publisher_edit_course'
EDIT_COURSE_RUN = 'publisher_edit_course_run'
VIEW_COURSE = 'publisher_view_course' VIEW_COURSE = 'publisher_view_course'
VIEW_COURSE_RUN = 'publisher_view_course_run' VIEW_COURSE_RUN = 'publisher_view_course_run'
...@@ -439,7 +440,8 @@ class OrganizationExtension(TimeStampedModel): ...@@ -439,7 +440,8 @@ class OrganizationExtension(TimeStampedModel):
class Meta(TimeStampedModel.Meta): class Meta(TimeStampedModel.Meta):
permissions = ( permissions = (
('edit_course_run', 'Can edit course run'), ('publisher_edit_course', 'Can edit course'),
('publisher_edit_course_run', 'Can edit course run'),
('publisher_view_course', 'Can view course'), ('publisher_view_course', 'Can view course'),
('publisher_view_course_run', 'Can view the course run'), ('publisher_view_course_run', 'Can view the course run'),
) )
......
...@@ -1434,3 +1434,21 @@ class CourseDetailViewTests(TestCase): ...@@ -1434,3 +1434,21 @@ class CourseDetailViewTests(TestCase):
self.user.groups.add(Group.objects.get(name=ADMIN_GROUP_NAME)) self.user.groups.add(Group.objects.get(name=ADMIN_GROUP_NAME))
response = self.client.get(self.detail_page_url) response = self.client.get(self.detail_page_url)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
def test_details_page_with_edit_permission(self):
""" Test that user can see edit button on course detail page. """
assign_perm(OrganizationExtension.VIEW_COURSE, self.user, self.organization_extension)
# Verify that user cannot see edit button without edit permission.
self.assert_can_edit_permission(can_edit=False)
assign_perm(OrganizationExtension.EDIT_COURSE, self.user, self.organization_extension)
# Verify that user can see edit button with edit permission.
self.assert_can_edit_permission(can_edit=True)
def assert_can_edit_permission(self, can_edit):
""" Dry method to assert can_edit permission. """
response = self.client.get(self.detail_page_url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['can_edit'], can_edit)
...@@ -260,7 +260,13 @@ class CourseDetailView(mixins.LoginRequiredMixin, mixins.ViewPermissionMixin, De ...@@ -260,7 +260,13 @@ class CourseDetailView(mixins.LoginRequiredMixin, mixins.ViewPermissionMixin, De
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(CourseDetailView, self).get_context_data(**kwargs) context = super(CourseDetailView, self).get_context_data(**kwargs)
user = self.request.user
context['comment_object'] = self context['comment_object'] = self
context['can_edit'] = any(
[user.has_perm(OrganizationExtension.EDIT_COURSE, org.organization_extension)
for org in self.object.organizations.all()]
)
return context return context
......
...@@ -11,6 +11,15 @@ ...@@ -11,6 +11,15 @@
<a href="{% url 'publisher:publisher_courses' %}">{% trans "Courses" %}</a> > <span>{{ object.title }}</span> <a href="{% url 'publisher:publisher_courses' %}">{% trans "Courses" %}</a> > <span>{{ object.title }}</span>
</div> </div>
<div class="approval-widget">
{% if can_edit %}
<a href="{% url 'publisher:publisher_courses_edit' pk=object.id %}" class="btn btn-neutral btn-course-edit">
{% trans "EDIT" %}
</a>
<div class="clearfix"></div>
{% endif %}
</div>
<div class="layout-full publisher-layout layout"> <div class="layout-full publisher-layout layout">
<h2 class="layout-title">{% trans "Base information" %}</h2> <h2 class="layout-title">{% trans "Base information" %}</h2>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment