devise+ActiveAdmin+CancancanでAbilityクラスのuserがnilだった時に確認するところ


前提

先にdeviseでログイン回り構築済みの状態で、ActiveAdmin、cancancanの順に追加していった。
以下のサイトを参考に設定。

環境は以下

  • Ruby 2.5.3
  • Rails 5.2.3
  • activeadmin 2.0.0
  • cancancan 3.0.1
  • devise 4.6.2
  • rolify 5.2.0

Abilityクラスのuserがnilだったら...

ためしたところ、権限が効いていなかった。
解決策としては、active_admin.rbのconfig.current_user_methodのコメントアウトを外すことだった。

config/initialize/active_admin.rb(97行目あたり)
config.current_user_method = :current_user

その他の補足

左上のタイトルを変えたりリンクをつけたりする

config/initialize/active_admin.rb(7行目あたり)
  config.site_title = "マスタメンテナンス"
  config.site_title_link = "/admin"

サインアウトでエラーとならないよう、deleteのメソッドを追加する。

config/initialize/active_admin.rb(109行目あたり)
  config.logout_link_path = :destroy_user_session_path
  config.logout_link_method = :delete

ユーザのActiveAdminサンプル

ロールにrolifyを使用している。ユーザテーブルのマスタメンテ画面にロール情報も追加したいときのサンプル
stack overflow-Updating Roles in rolify using ActiveAdminより

app/admin/users.rb
ActiveAdmin.register User do
  permit_params :email, :password, :password_confirmation, :confirmed_at, role_ids: []

  form do |f|
    f.inputs "User Details" do
      f.input :email
      f.input :password
      f.input :password_confirmation
      f.input :confirmed_at
      f.input :roles, as: :check_boxes
    end
    f.actions
  end

  # Allow form to be submitted without a password
  controller do
    def update
      if params[:user][:password].blank?
        params[:user].delete "password"
        params[:user].delete "password_confirmation"
      end

      super
    end
  end
end