Deviseで一般ユーザーと管理者を分ける。
Deviseを使い、一般ユーザーは管理者からしか作成できないようにする。
初めに、一般ユーザーと管理者ユーザーを分けるには
https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-role
にあるように2つの方法があるようだ。
ここでは、Option2の方法、すなわち、userモデルに、adminフィールドを追加し、そのbooleanで一般ユーザーか管理者かを分ける方法をとる。
Option2のとおりに
$ rails generate migration add_admin_to_users admin:boolean
$ rake db:migrate
とし、あとは、ページで管理者ならば
if current_user.try(:admin?)
# do something
end
と言うコードを追加する。
また、ビューをカスタマイズするには
Tools -> Run Rails Generatorで devise:viewsを選択し、「ok」
をクリックすると、app/viewss以下にdeviseディレクトリが作成され、
各メソッド用のviewがコピーされる。
ここで、models/user.rbの
devise :database_authenticatable, #:registerable,
:recoverable, :rememberable, #:trackable,
:validatable
でユーザー自身では登録を不可にするため、registerableをコメントアウトする。
次に、管理者からのみユーザーの登録をするには、別途
users_controller.rbを作成するが、ApplicationControllerではなく
下記のようにDevise::RegistrationControllerを継承するようにする。
class UsersController < Devise::RegistrationsController def custom_new end def index end
ここで、メソッド名は元々のDevise::RegistrrationControllerにあるものと被らないようにする。(例えばnewなどは被ってしまう)
ビューはapp/views/users以下に作る