Railsで手早くユーザー管理と権限設定、phpadmin的な管理者がデータを直接確認出来るような仕組みを入れたい時にこれが便利。
解説
- devise ユーザー管理(メールを送ったり、パスワードのリマインドなども可能)
⇒どこのサイトでもよくある、メールアドレスで登録して、確認メールが来てっていう一連の動作がこのgemだけで作れる。 - cancancan 権限管理(モデル毎のアクセス権も細かく設定出来る)
⇒deviseで作ったユーザーに権限を与えて、例えば管理者は全ての機能を使えるけど、ユーザーは全ての機能のEditしかできないって事も可能。
indexではmodelとuserの関連付けを見て、勝手に自分に閲覧権限がある物のみを表示するっていうメッチャ便利な動きもしてくれる。 - rails_admin 管理者のデータ管理機能
手順
gemのインストール
まずは必要なgemを記述して、インストールしていきます。
gem 'devise'
gem 'cancancan'
gem 'rails_admin'
bundle install
##deviseのセットアップ
次にdeviseのセットアップをします。
rails g devise:install
rails g devise user
rake db:migrate
これでdeviseはインストールされつつ、userというモデルが作られます。
2行目でしているuserですが、このモデルとテーブルがdeviseで登録されたユーザーを管理する物になります。
別にadminでもcustomerでも何でも構いません。
今回は触れませんが、ユーザー登録画面を分けて、adminモデルとuserモデルを作るという事も可能です。
次に、取り急ぎ管理者ユーザーを追加します。
http://<host>:3000/users/sign_up
にアクセスして、メールアドレス等入力して登録して下さい。
##cancancanのセットアップ
rails g cancan:ability
##rails_adminのセットアップ
rails g rails_admin:install
※installを行った際、パスを聞かれます。今回はデフォルトの/adminで表示させますので、そのままEnterで進みます。
次に、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
rake db:migrate
次に先ほど登録したユーザーを管理者に設定します。
rails c
> user = User.find(1)
> user.update_attribute(:admin_flg, true)
最後にcancancanの権限設定をします。
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
cancancanの詳細はまた別途記載しますが、上記の条件の解説をすると、
ログイン済みで、admin_flgがtrueのユーザーは、全てのモデルのCRUDが行えて(can :manage, :all)、rails_adminにアクセス権限(can :access, :rails_admin)があるという感じです。
##rails_adminの確認
admin_flgがtrueのユーザーにてログイン後、http://<host>:3000/admin
にアクセスし、以下の画面が出れば完了です。
最後に
Railsのコーディングを行っていくと、エディターで悩む事もあると思います。
私は最初はATOMを使い、今はRubyMineを使っています。
RubyMine導入してみようと思う方、良かったら以下サイトも見てみて下さい。
RubyMine導入方法