From 71fd3b9b07426cfa186f87ac30d547f4b8772252 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Thu, 22 Nov 2018 18:45:31 +0100 Subject: [PATCH] Add role to ExternalUser and update it via LTI --- app/controllers/concerns/lti.rb | 17 ++++++++++++++++- app/views/external_users/show.html.slim | 1 + ...20181116143743_add_role_to_external_users.rb | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20181116143743_add_role_to_external_users.rb diff --git a/app/controllers/concerns/lti.rb b/app/controllers/concerns/lti.rb index e8241af3..124b32cb 100644 --- a/app/controllers/concerns/lti.rb +++ b/app/controllers/concerns/lti.rb @@ -52,6 +52,21 @@ module Lti end private :external_user_name + def external_user_role(provider) + result = 'learner' + provider.roles.each do |role| + case role.downcase! + when 'administrator' + result = 'admin' + when 'instructor' + result = 'teacher' if result == 'learner' + else # 'learner' + next + end + end + result + end + def refuse_lti_launch(options = {}) return_to_consumer(lti_errorlog: options[:message], lti_errormsg: t('sessions.oauth.failure')) end @@ -129,7 +144,7 @@ module Lti def set_current_user @current_user = ExternalUser.find_or_create_by(consumer_id: @consumer.id, external_id: @provider.user_id) - @current_user.update(email: external_user_email(@provider), name: external_user_name(@provider)) + @current_user.update(email: external_user_email(@provider), name: external_user_name(@provider), role: external_user_role(@provider)) end private :set_current_user diff --git a/app/views/external_users/show.html.slim b/app/views/external_users/show.html.slim index 33e2dd6b..9d18e942 100644 --- a/app/views/external_users/show.html.slim +++ b/app/views/external_users/show.html.slim @@ -3,6 +3,7 @@ h1 = @user.name = row(label: 'external_user.name', value: @user.name) //= row(label: 'external_user.email', value: @user.email) = row(label: 'external_user.consumer', value: link_to(@user.consumer, @user.consumer)) += row(label: 'external_user.role', value: t("users.roles.#{@user.role}")) h4.mt-4 = link_to(t('.exercise_statistics'), statistics_external_user_path(@user)) diff --git a/db/migrate/20181116143743_add_role_to_external_users.rb b/db/migrate/20181116143743_add_role_to_external_users.rb new file mode 100644 index 00000000..5b4d7066 --- /dev/null +++ b/db/migrate/20181116143743_add_role_to_external_users.rb @@ -0,0 +1,5 @@ +class AddRoleToExternalUsers < ActiveRecord::Migration[5.2] + def change + add_column :external_users, :role, :string, default: 'learner', null: false + end +end