diff --git a/sis_provisioner/templates/handlebars/canvas_admin/user_info.html b/sis_provisioner/templates/handlebars/canvas_admin/user_info.html index 1debc017..25b050c6 100755 --- a/sis_provisioner/templates/handlebars/canvas_admin/user_info.html +++ b/sis_provisioner/templates/handlebars/canvas_admin/user_info.html @@ -33,6 +33,9 @@
UWNetID: {{login_id}} {{#if can_access_canvas}} + {{#if can_masquerade_as_user}} +    Masquerade + {{/if}} {{else}} {{/if}} diff --git a/sis_provisioner/test/views/test_admin.py b/sis_provisioner/test/views/test_admin.py index 63693727..d7f4d2d1 100644 --- a/sis_provisioner/test/views/test_admin.py +++ b/sis_provisioner/test/views/test_admin.py @@ -62,6 +62,12 @@ def test_can_manage_external_tools(self): def test_can_manage_course_expirations(self): self.assertTrue(AdminView.can_manage_course_expirations(self.request)) + def test_can_masquerade_as_user(self): + self.assertTrue(AdminView.can_masquerade_as_user( + self.request, 'jbothell')) + self.assertFalse(AdminView.can_masquerade_as_user( + self.request, 'javerage')) + class RestDispatchTest(TestCase): def test_error_response(self): diff --git a/sis_provisioner/views/admin.py b/sis_provisioner/views/admin.py index 2f15c7c2..b6e75e81 100644 --- a/sis_provisioner/views/admin.py +++ b/sis_provisioner/views/admin.py @@ -89,6 +89,13 @@ def can_merge_users(request): def can_create_user_course(request): return is_member_of_group(request, settings.RESTCLIENTS_ADMIN_GROUP) + @staticmethod + def can_masquerade_as_user(request, as_user): + return ( + get_user(request) != as_user and + not Admin.objects.is_account_admin(as_user) and + is_member_of_group(request, settings.RESTCLIENTS_ADMIN_GROUP)) + class ImportStatus(AdminView): template_name = 'canvas_admin/status.html' diff --git a/sis_provisioner/views/user.py b/sis_provisioner/views/user.py index b0d18f6c..302ef433 100644 --- a/sis_provisioner/views/user.py +++ b/sis_provisioner/views/user.py @@ -89,6 +89,7 @@ def response_for_person(self, person): 'queue_id': None, 'can_merge_users': False, 'can_create_user_course': False, + 'can_masquerade_as_user': False, 'enrollment_url': None, 'canvas_users': [], } @@ -148,6 +149,10 @@ def response_for_person(self, person): if (self.can_create_user_course(self.request) and response['can_access_canvas']): response['can_create_user_course'] = True + + if (self.can_masquerade_as_user( + self.request, response['canvas_users'][0]['login_id'])): + response['can_masquerade_as_user'] = True else: response['can_merge_users'] = self.can_merge_users(self.request)