Rails Adminを使ってみる

RailsAdminとは?

アプリケーションの管理画面を自動生成してくれるgemです。
管理画面内でデータの確認や追加ができるようになります。
今回は前提条件として土台のrailsアプリケーションとdeviseのセットアップは完了していることを想定しています。

RailsAdminをインストー

gem `rails_admin`

$ bundle install

RailsAdminの設定ファイルを作成

$ rails g rails_admin:install このコマンドを実行すると、「管理画面のパスは何にする?」みたいなことを聞いてくるのでadminと入力し実行します。
するとroutes.rbに以下のコードが自動生成され、

mount RailsAdmin::Engine => '/admin', as: 'rails_admin'

config/initializers/rails_admin.rbファイルが生成されます。 f:id:maru877:20170710093618p:plain

ブラウザで確認してみる

ブラウザhttp://localhost:3000/adminにアクセスし、admin画面が追加されているか確認してみます。(以下の写真はイメージです。当たり前ですが、モデル名などはアプリケーションごとに異なります。) f:id:maru877:20170710185920p:plain

現状、全ユーザーが管理画面へアクセス出来てしまうので、アクセス権限を持つユーザーのみアクセスできるようにします。

admin画面のアクセス制御

アクセス制御はcancanというgemを使って権限管理します。

gem 'cancan'

$ bundle install

config/initializers/rails_admin.rbの以下のコードをコメントアウトします。
コメントアウトすることでrails_adminをdeviseとcancanに連携することができます。

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

  # == Cancan ==
  config.authorize_with :cancan

再度http://localhost:3000/adminにアクセスし、制御が出来ているかを確認します。 f:id:maru877:20170710195359p:plain

次にusersテーブルにadminカラムを追加します。 $ rails g migration AddColumnAdminToUser admin:boolean

class AddColumnAdminToUser < ActiveRecord::Migration[5.0]
  def change
    add_column :users, :admin, :boolean, default: :false
  end
end

app/models/ability.rbのinitializeメソッド内に、制御ロジックを追記します。

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

ここまでの作業を終えると、usersテーブルのadminカラムの真偽値によるアクセス制御をかけることが出来ます。