【Rails4】rails_adminで楽に管理画面を作ってみた

rails_adminを追加。

gem 'rails_admin'

インストール後、設定ファイル生成。

$ bundle install
$ rails g rails_admin:install

設定ファイルの ==Device==の項目のコメントを外す。
config/initializers/rails_admin.rb

RailsAdmin.config do |config|

  ### Popular gems integration

  ## == Devise ==
  config.authenticate_with do
    warden.authenticate! scope: :user
  end
  config.current_user_method(&:current_user)

  ## == Cancan ==
  # config.authorize_with :cancan

  ## == Pundit ==
  # config.authorize_with :pundit

  ## == PaperTrail ==
  # config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0

  ### More at https://github.com/sferik/rails_admin/wiki/Base-configuration

  config.actions do
    dashboard                     # mandatory
    index                         # mandatory
    new
    export
    bulk_delete
    show
    edit
    delete
    show_in_app

    ## With an audit adapter, you can add:
    # history_index
    # history_show
  end
end

以下のファイルをコピーして配置して日本語化。
https://gist.github.com/mshibuya/1662352#file_rails_admin.ja.yml
config/locales/rails_admin.ja.yml

以下のアドレスにアクセスし、管理画面が表示されれば成功。
http://localhost:3000/admin/


このままだと全ユーザーが管理画面にアクセスできるためroleを付与する。

cancancanを追加。
Gemfile

gem 'cancancan'

cancancanインストール後、設定ファイル生成。

$ bundle install
$ rails g cancan:ability

userテーブルにadminフィールドを追加しておく。
追加したadminを参照するように設定。

class Ability
  include CanCan::Ability

  def initialize(user)
    if user && user.admin?
      can :access, :rails_admin
      can :manage, :all
    end
  end
end


コンソールで管理者にしたいユーザーのadminフラグをtrueに更新。

$ user = User.first
$ user.admin = true
$ user.save

これで管理画面がadmin権限を持つユーザー以外のアクセスを遮断するようになる。