module CanvasSync::Concerns module AbilityHelper extend ActiveSupport::Concern include PandaPal::Concerns::AbilityHelper if defined?(PandaPal::Concerns::AbilityHelper) # @abstract Implemented by PandaPal def panda_pal_session; end # Middle Domain def 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? ::Course.find_by(canvas_id: panda_pal_session.get_lti_cust_param('custom_canvas_course_id')) else ::Account.find_by(canvas_id: panda_pal_session.get_lti_cust_param('custom_canvas_account_id')) end end end def launch_account @launch_account ||= launch_context.respond_to?(:account) ? launch_context.account : ::Account.find_by(canvas_id: panda_pal_session.get_lti_cust_param('custom_canvas_account_id')) end # CanvasSync Domain def canvas_permissions panda_pal_session[:canvas_permissions] ||= ::Role.joined_permissions(canvas_roles) end def canvas_roles @canvas_roles ||= Role.for_labels(panda_pal_session.canvas_role_labels, launch_account) end def canvas_root_account_roles role_labels = panda_pal_session.canvas_account_role_labels('self') ::Role.for_labels(role_labels, ::Account.find_by(canvas_parent_account_id: nil)) end def canvas_account_roles canvas_roles.where(base_role_type: 'AccountMembership') end def canvas_course_roles canvas_roles.where.not(base_role_type: 'AccountMembership') end def canvas_super_user? panda_pal_session.cache(:canvas_super_user?) do panda_pal_session.canvas_site_admin? || (panda_pal_session.canvas_account_role_labels(:root) & ["AccountAdmin", "Account Admin"]).present? end end def canvas_user_id user&.canvas_id || panda_pal_session.get_lti_cust_param('canvas_user_id') end end end