LoginSignup
2
1

More than 5 years have passed since last update.

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

Posted at

前提

先に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
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1