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)