Module: Sessions::MadminUserPanel

Extended by:
ActiveSupport::Concern
Defined in:
lib/generators/sessions/templates/madmin/user_panel/madmin_user_panel.rb

Overview

Optional per-user Madmin panel actions. Include this in Madmin::UsersController, then draw the routes printed by rails generate sessions:madmin --user-panel.

Constant Summary collapse

SESSION_EVENTS_PER_PAGE =
30

Instance Method Summary collapse

Instance Method Details

#revoke_all_sessionsObject

Account-takeover response: revoke every live row with admin attribution. Each row writes its own revoked event and, in Devise mode, rotates remember-me credentials so a long-lived cookie cannot revive the device.



32
33
34
35
36
37
38
39
40
41
# File 'lib/generators/sessions/templates/madmin/user_panel/madmin_user_panel.rb', line 32

def revoke_all_sessions
  user = User.find(params[:id])
  count = user.sessions.live.count

  user.revoke_all_sessions!(by: current_user)
  flash[:notice] = "#{count} #{"session".pluralize(count)} revoked. " \
                   "Every device will be signed out on its next request."

  redirect_to main_app.sessions_madmin_user_path(user)
end

#sessionsObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/generators/sessions/templates/madmin/user_panel/madmin_user_panel.rb', line 12

def sessions
  @user = User.find(params[:id])
  @sessions = @user.sessions.live.by_recency.to_a
  events = @user.session_history.recent

  @failed_last_24h = events.failed_logins.last_24_hours.count
  if respond_to?(:pagy, true)
    @pagy, @events = pagy(events, limit: SESSION_EVENTS_PER_PAGE)
  else
    @events = events.limit(SESSION_EVENTS_PER_PAGE)
  end
rescue StandardError => e
  raise unless defined?(::Pagy::OptionError) && e.is_a?(::Pagy::OptionError)

  @pagy, @events = pagy(events, page: 1, limit: SESSION_EVENTS_PER_PAGE)
end