Railsアプリに権限設定と管理者画面をつける!お手軽でした!

Ruby

題名の通り、Railsアプリに権限設定と管理者画面を付与してみようと思います。
deviseとcancancanとrails_adminを使うことで、

サクッと!

できてしまいましたので、ご紹介です。
railsは5.0.3です。

必要なgemのインストール

まずは必要なgemをインストールします。Gemfileに以下の記述をします。

gem 'devise'
gem 'cancancan'
gem 'rails_admin'

その後、bundle installですね。

deviseのセットアップ

次にdeviseのセットアップをします。

rails g devise:install
rails g devise user
rails db:migrate

これでdeviseはインストールされつつ、userというモデルが作られます。

その後、http://<host>:3000/users/sign_upにアクセスして、メールアドレス等入力して登録して下さい。

cancancanのセットアップ

cancancanのセットアップは以下のコマンドです。

rails g cancan:ability

rails_adminのセットアップ

rails_adminのセットアップは以下のコマンドです。

rails g rails_admin:install

installを行った際、パスを聞かれます。今回はデフォルトの/adminで表示させますので、そのままEnterで進みます。

次に、rails_admin.rbを編集します
以下の部分のコメントアウト外してください。

  • config/initializers/rails_admin.rb
# == Devise ==
config.authenticate_with do
  warden.authenticate! scope: :user
end
  config.current_user_method(&:current_user)

# == Cancan ==
config.authorize_with :cancan

adminの判定を追加

rails_adminでの管理画面に入れるユーザーを管理者のみに限定する設定を入れていきます。
まずは、userテーブルにadmin_flgを追加し、このフラグがtrueのユーザーのみ管理者として扱います。

rails g migration AddAdminFlgToUser admin_flg:boolean
rails db:migrate

次に先ほど登録したユーザーを管理者に設定します。railsのコンソールで行うのが楽ですね。

rails c
> user = User.find(1)
> user.update_attribute(:admin_flg, true)

最後にcancancanの権限設定をします。
ability.rbに設定して下さい。

  • app/models/ability.rb
class Ability
  include CanCan::Ability

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

ログイン済みで、admin_flgがtrueのユーザーは、全てのモデルのCRUDが行えて(can :manage, :all)、rails_adminの管理画面にアクセス権限(can :access, :rails_admin)があるという設定になっております。

rails_adminの確認

admin_flgがtrueのユーザーにてログイン後、http://<host>:3000/adminにアクセスし、以下の画面が出ればオッケーです。

お手軽でした!
より細かく権限設定する場合は、、、わからないので勉強します。

herokuにアップする場合

herokuにプッシュした後、

heroku rake db:migrate
heroku run rails c
> user = User.find(1)
> user.update_attribute(:admin_flg, true)

でオッケーです!

タイトルとURLをコピーしました