Add role parameter to LTI. BLD-583.
This commit is contained in:
42
cms/djangoapps/contentstore/tests/test_access.py
Normal file
42
cms/djangoapps/contentstore/tests/test_access.py
Normal file
@@ -0,0 +1,42 @@
|
||||
"""
|
||||
Tests access.py
|
||||
"""
|
||||
from django.test import TestCase
|
||||
from django.contrib.auth.models import User
|
||||
from xmodule.modulestore import Location
|
||||
|
||||
from student.roles import CourseInstructorRole, CourseStaffRole
|
||||
from student.tests.factories import AdminFactory
|
||||
from student.auth import add_users
|
||||
from contentstore.views.access import get_user_role
|
||||
|
||||
class RolesTest(TestCase):
|
||||
"""
|
||||
Tests for user roles.
|
||||
"""
|
||||
def setUp(self):
|
||||
""" Test case setup """
|
||||
self.global_admin = AdminFactory()
|
||||
self.instructor = User.objects.create_user('testinstructor', 'testinstructor+courses@edx.org', 'foo')
|
||||
self.staff = User.objects.create_user('teststaff', 'teststaff+courses@edx.org', 'foo')
|
||||
self.location = Location('i4x', 'mitX', '101', 'course', 'test')
|
||||
|
||||
def test_get_user_role_instructor(self):
|
||||
"""
|
||||
Verifies if user is instructor.
|
||||
"""
|
||||
add_users(self.global_admin, CourseInstructorRole(self.location), self.instructor)
|
||||
self.assertEqual(
|
||||
'instructor',
|
||||
get_user_role(self.instructor, self.location, self.location.course_id)
|
||||
)
|
||||
|
||||
def test_get_user_role_staff(self):
|
||||
"""
|
||||
Verifies if user is staff.
|
||||
"""
|
||||
add_users(self.global_admin, CourseStaffRole(self.location), self.staff)
|
||||
self.assertEqual(
|
||||
'staff',
|
||||
get_user_role(self.staff, self.location, self.location.course_id)
|
||||
)
|
||||
@@ -1,6 +1,6 @@
|
||||
from ..utils import get_course_location_for_item
|
||||
from xmodule.modulestore.locator import CourseLocator
|
||||
from student.roles import CourseStaffRole, GlobalStaff
|
||||
from student.roles import CourseStaffRole, GlobalStaff, CourseInstructorRole
|
||||
from student import auth
|
||||
|
||||
|
||||
@@ -20,3 +20,17 @@ def has_course_access(user, location, role=CourseStaffRole):
|
||||
# this can be expensive if location is not category=='course'
|
||||
location = get_course_location_for_item(location)
|
||||
return auth.has_access(user, role(location))
|
||||
|
||||
|
||||
def get_user_role(user, location, context):
|
||||
"""
|
||||
Return corresponding string if user has staff or instructor role in Studio.
|
||||
This will not return student role because its purpose for using in Studio.
|
||||
|
||||
:param location: a descriptor.location
|
||||
:param context: a course_id
|
||||
"""
|
||||
if auth.has_access(user, CourseInstructorRole(location, context)):
|
||||
return 'instructor'
|
||||
else:
|
||||
return 'staff'
|
||||
|
||||
@@ -26,6 +26,8 @@ from .session_kv_store import SessionKeyValueStore
|
||||
from .helpers import render_from_lms
|
||||
from ..utils import get_course_for_item
|
||||
|
||||
from contentstore.views.access import get_user_role
|
||||
|
||||
__all__ = ['preview_handler']
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -132,6 +134,7 @@ def _preview_module_system(request, descriptor):
|
||||
),
|
||||
),
|
||||
error_descriptor_class=ErrorDescriptor,
|
||||
get_user_role=lambda: get_user_role(request.user, descriptor.location, course_id),
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user