Railsアプリに管理画面を導入する必要があったので、
管理画面を簡単に作成できるrails adminをherokuに導入した。
rails adminの他にdevise(認証管理)とcancan(権限管理)も利用する。
環境
$ ruby -v; rails -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-darwin14]
Rails 4.2.1
devise設定
Gemfileに追記
gem 'devise'
インストール
$ rails g devise:install
$ rails g devise user
設定追記。
必要であればproduction.rbにも記載する。
$ vim config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
rails_admin設定
Gemfileに追記
gem 'rails_admin'
インストール
$ rails g rails_admin:install
? Where do you want to mount rails_admin? Press <enter> for [admin] >
route mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
create config/initializers/rails_admin.rb
以下のコメントアウトを外す
$ vim config/initializers/rails_admin.rb
## == Devise ==
# config.authenticate_with do
# warden.authenticate! scope: :user
# end
# config.current_user_method(&:current_user)
cancan設定
Gemfileに追記
gem 'cancan'
インストール
$ rails g cancan:ability
管理権限を以下のファイルで設定する
$ vim app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
if user && user.admin?
can :access, :rails_admin # grant access to rails_admin
can :manage, :all # allow superadmins to do anything
end
end
end
adminユーザーを識別するためにadminカラムを追加する
$ rails g migration AddAdminToUser admin
$ bundle exec rake db:migrate
consoleでadminをtrueに設定する
$ rails c
> user = User.find(1)
> user.update_attribute(:admin, "true")
以下のコメントアウトを外すことで、
adminに設定したユーザーのみが管理画面にアクセスすることができる。
$ vim config/initializers/rails_admin.rb
## == Cancan ==
# config.authorize_with :cancan
herokuデプロイ
特に躓く箇所はないが、
手動でmigrationコマンドを打つ必要があった。
$ heroku run rake db:migrate --app ***
参考資料
sferik/rails_admin
devise、cancanと連携して管理者ユーザーにのみRailsAdminを公開するには | hrendoh's memo