Module: CanvasSync::Concerns::AbilityHelper

Extended by:
ActiveSupport::Concern
Includes:
PandaPal::Concerns::AbilityHelper
Defined in:
lib/canvas_sync/concerns/ability_helper.rb

Instance Method Summary collapse

Instance Method Details

#canvas_account_admin?(account = launch_account) ⇒ Boolean

Returns:

  • (Boolean)


105
106
107
108
109
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 105

def ( = )
  panda_pal_session.cache([:canvas_account_admin?, ]) do
    panda_pal_session.canvas_site_admin? || (panda_pal_session.() & ["AccountAdmin", "Account Admin"]).present?
  end
end

#canvas_account_rolesObject



93
94
95
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 93

def 
  canvas_roles.where(base_role_type: 'AccountMembership')
end

#canvas_course_rolesObject



97
98
99
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 97

def canvas_course_roles
  canvas_roles.where.not(base_role_type: 'AccountMembership')
end

#canvas_permissionsObject



80
81
82
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 80

def canvas_permissions
  panda_pal_session[:canvas_permissions] ||= ::Role.joined_permissions(canvas_roles)
end

#canvas_rolesObject



84
85
86
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 84

def canvas_roles
  @canvas_roles ||= ::Role.for_labels(panda_pal_session.canvas_role_labels, )
end

#canvas_root_account_rolesObject



88
89
90
91
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 88

def 
  role_labels = panda_pal_session.('self')
  ::Role.for_labels(role_labels, ::Account.find_by(canvas_parent_account_id: nil))
end

#canvas_super_user?Boolean

Returns:

  • (Boolean)


101
102
103
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 101

def canvas_super_user?
  (:root)
end

#canvas_user_idObject



111
112
113
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 111

def canvas_user_id
  user&.canvas_id || panda_pal_session.get_lti_cust_param('canvas_user_id')
end

#launch_accountObject



51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 51

def 
  return @launch_account if defined?(@launch_account)

  if launch_context.respond_to?(:account)
    @launch_account = launch_context.
    @launch_account ||= load_canvas_model(::Account, launch_context.) if launch_context.respond_to?(:canvas_account_id)
  end

  @launch_account ||= load_canvas_model(::Account, panda_pal_session.get_lti_cust_param('custom_canvas_account_id'))

  @launch_account ||= ::Account.find_by(canvas_parent_account_id: nil)

  @launch_account
end

#launch_contextObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 36

def launch_context
  return nil unless panda_pal_session.present?
  return @launch_context if defined?(@launch_context)

  @launch_context ||= begin
    if panda_pal_session.lti_launch_placement == "global_navigation"
      :global
    elsif panda_pal_session.get_lti_cust_param('custom_canvas_course_id').present?
      load_canvas_model(::Course, panda_pal_session.get_lti_cust_param('custom_canvas_course_id'))
    else
      load_canvas_model(::Account, panda_pal_session.get_lti_cust_param('custom_canvas_account_id'))
    end
  end
end

#load_canvas_model(model, canvas_id) ⇒ Object

CanvasSync Domain



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 68

def load_canvas_model(model, canvas_id)
  return nil unless model < CanvasSync::Record
  return nil unless canvas_id.present?
  return nil if canvas_id.is_a?(String) && canvas_id.include?('$')

  if model.respond_to?(:find_or_jit_sync)
    model.find_or_jit_sync(canvas_id)
  else
    model.find_by(canvas_id: canvas_id)
  end
end

#panda_pal_sessionObject



14
15
16
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 14

def panda_pal_session
  raise "This feature was moved to PandaPal as of CanvasSync 0.20.0/PandaPal 5.9.9. You should update to PandaPal >= 5.9.9."
end

#userObject

Middle Domain



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/canvas_sync/concerns/ability_helper.rb', line 21

def user
  return @user if defined?(@user)

  canvas_user_id = panda_pal_session.get_lti_cust_param('custom_canvas_user_id')
  if canvas_user_id.present?
    begin
      @user = load_canvas_model(::User, canvas_user_id)
    rescue Footrest::HttpError::NotFound => err
      # Mainly catches SiteAdmin users not found via the API
      @user = nil
    end
  end
  @user
end