題名の通り、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)
でオッケーです!