Rails4でActiveAdminとdeviseとcancancanをつかって管理者ページを作る
環境
Gemfile
gem 'rails', '4.1.2' gem 'cancancan' gem 'devise' gem 'activeadmin', github: 'activeadmin'
bundleする
$ bundle install
まずはdeviseでモデルを作る.
role
でadminかどうかを判定するのでUser
コントローラに追加
$ rails generate devise:install $ rails generate devise User $ rails generate migration add_role_to_users role:integer $ rake db:migrate
Deviseのモデルを使うのでActiveAdminでUserモデルをつくらないようにするために--skip-users
$ rails generate active_admin:install --skip-users create config/initializers/active_admin.rb create app/admin create app/admin/dashboard.rb route ActiveAdmin.routes(self) generate active_admin:assets create app/assets/javascripts/active_admin.js.coffee create app/assets/stylesheets/active_admin.css.scss create db/migrate/20140829091410_create_active_admin_comments.rb $ rake db:migrate
これするとconfig/intializers/active_admin.rb
のなかを幾つか変えないといけない
config.current_user_method = :current_admin_user ↓ config.current_user_method = :current_user config.logout_link_path = :destroy_admin_user_session_path ↓ config.logout_link_path = :destroy_user_session_path
またapp/application_controller.rb
に以下を追加
def authenticate_admin_user! authenticate_user! unless current_user.admin? flash[:alert] = "This area is restricted to administrators only." redirect_to root_path end end
user
モデルはadmin?
は持ってないので以下をmodel/user.rb
に追加(Rails 4からenum
が使える)
enum role: %(admin normal)
cancancanいらなかった!!!
role
が3つ以上あるといる気がするけどめんどくさそう
参考
Railsで新規にWebサービスを立ち上げる際にやったことまとめ [Rails] Devise and Active Admin Single User Model