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
ファイルが生成されます。
ブラウザで確認してみる
ブラウザhttp://localhost:3000/admin
にアクセスし、admin画面が追加されているか確認してみます。(以下の写真はイメージです。当たり前ですが、モデル名などはアプリケーションごとに異なります。)
現状、全ユーザーが管理画面へアクセス出来てしまうので、アクセス権限を持つユーザーのみアクセスできるようにします。
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
にアクセスし、制御が出来ているかを確認します。
次に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カラムの真偽値によるアクセス制御をかけることが出来ます。