Module: CanvasSync::Concerns::AbilityHelper
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/canvas_sync/concerns/ability_helper.rb
Defined Under Namespace
Classes: RoleStore
Instance Method Summary collapse
- #cache_on_session(key, &blk) ⇒ Object
- #canvas_account_roles ⇒ Object
- #canvas_course_roles ⇒ Object
-
#canvas_permissions ⇒ Object
CanvasSync Domain.
- #canvas_role_labels ⇒ Object
- #canvas_roles ⇒ Object
- #canvas_root_account_roles ⇒ Object
- #canvas_site_admin? ⇒ Boolean
- #canvas_super_user? ⇒ Boolean
- #canvas_user_id ⇒ Object
- #get_lti_cust_param(key) ⇒ Object
- #is_lti_launch? ⇒ Boolean
- #launch_account ⇒ Object
-
#launch_context ⇒ Object
Middle Domain.
- #launch_params ⇒ Object
- #lti_launch_placement ⇒ Object
- #lti_roles ⇒ Object
-
#panda_pal_session ⇒ Object
PandaPal Domain.
- #rails_session ⇒ Object
Instance Method Details
#cache_on_session(key, &blk) ⇒ Object
135 136 137 138 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 135 def cache_on_session(key, &blk) panda_pal_session[:ability_cache] ||= {} panda_pal_session[:ability_cache][key] ||= blk.call end |
#canvas_account_roles ⇒ Object
164 165 166 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 164 def canvas_account_roles canvas_roles.where(base_role_type: 'AccountMembership') end |
#canvas_course_roles ⇒ Object
168 169 170 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 168 def canvas_course_roles canvas_roles.where.not(base_role_type: 'AccountMembership') end |
#canvas_permissions ⇒ Object
CanvasSync Domain
142 143 144 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 142 def panda_pal_session[:canvas_permissions] ||= ::Role.(canvas_roles) end |
#canvas_role_labels ⇒ Object
33 34 35 36 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 33 def canvas_role_labels labels = get_lti_cust_param('custom_canvas_role') labels.is_a?(String) ? labels.split(',') : [] end |
#canvas_roles ⇒ Object
146 147 148 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 146 def canvas_roles @canvas_roles ||= Role.for_labels(canvas_role_labels, launch_account) end |
#canvas_root_account_roles ⇒ Object
150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 150 def canvas_root_account_roles role_labels = if "::Admin".safe_constantize && ::Admin < ::ActiveRecord::Base adm_query = ::Admin.where(canvas_account_id: current_organization.canvas_account_id, workflow_state: "active") adm_query.pluck(:role_name) else Rails.cache.fetch([self.class.name, "RootAccountAdminLinks", canvas_user_id], expires_in: 1.hour) do admin_entries = canvas_sync_client.account_admins('self', user_id: [canvas_user_id]) admin_entries = admin_entries.select{|ent| ent[:workflow_state] == 'active' } admin_entries.map{|ent| ent[:role] } end end ::Role.for_labels(role_labels, ::Account.find_by(canvas_parent_account_id: nil)) end |
#canvas_site_admin? ⇒ Boolean
42 43 44 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 42 def canvas_site_admin? lti_roles.system_roles.include?("sys_admin") end |
#canvas_super_user? ⇒ Boolean
172 173 174 175 176 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 172 def canvas_super_user? cache_on_session(:canvas_super_user?) do canvas_site_admin? || canvas_root_account_roles.map(&:label).include?("Account Admin") end end |
#canvas_user_id ⇒ Object
178 179 180 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 178 def canvas_user_id user&.canvas_id end |
#get_lti_cust_param(key) ⇒ Object
23 24 25 26 27 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 23 def get_lti_cust_param(key) nkey = key.to_s.gsub(/^custom_/, '') launch_params.dig("https://purl.imsglobal.org/spec/lti/claim/custom", nkey) || launch_params[nkey] || launch_params["custom_#{nkey}"] end |
#is_lti_launch? ⇒ Boolean
15 16 17 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 15 def is_lti_launch? panda_pal_session.present? end |
#launch_account ⇒ Object
131 132 133 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 131 def launch_account @launch_account ||= launch_context.respond_to?(:account) ? launch_context.account : ::Account.find_by(canvas_id: get_lti_cust_param('custom_canvas_account_id')) end |
#launch_context ⇒ Object
Middle Domain
119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 119 def launch_context @launch_context ||= begin if lti_launch_placement == "global_navigation" :global elsif get_lti_cust_param('custom_canvas_course_id').present? ::Course.find_by(canvas_id: get_lti_cust_param('custom_canvas_course_id')) else ::Account.find_by(canvas_id: get_lti_cust_param('custom_canvas_account_id')) end end end |
#launch_params ⇒ Object
19 20 21 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 19 def launch_params @launch_params ||= panda_pal_session[:launch_params] || {} end |
#lti_launch_placement ⇒ Object
29 30 31 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 29 def lti_launch_placement launch_params['https://www.instructure.com/placement'] || launch_params[:launch_type] end |
#lti_roles ⇒ Object
38 39 40 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 38 def lti_roles @lti_roles ||= RoleStore.new(launch_params["https://purl.imsglobal.org/spec/lti/claim/roles"] || launch_params['ext_roles'] || '') end |
#panda_pal_session ⇒ Object
PandaPal Domain
7 8 9 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 7 def panda_pal_session @panda_pal_session ||= @controller.current_session&.data || {} end |
#rails_session ⇒ Object
11 12 13 |
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 11 def rails_session @rails_session ||= @controller.session end |