devise と cancan を使って権限管理可能な管理画面を作る。 (1)
はじめに
今回 devise と cancan を使って簡単な権限管理可能な画面をサンプルを作ったので それのメモです。
環境構築
まずはプロジェクトを作ります。
database.yml を環境に合わせて修正します。
プロジェクトができたらgem を追加します。
Gemfileに使うgemを追記します.
gem 'devise' gem 'cancan'
追記したらgemをインストールします。 プロジェクトごとにgemを分けるのに vendor/bundle 以下にインストールします。
$ bundle install --path vendor/bundle
無事にインストールできたと思います。
※以後で bundle exec を使用する際に環境によってはエラーが出るかもしれませんが、エラー文言で検索するとでてくるのでここでは割愛します。
これで環境は整いました。
devise で認証画面を作る
次に認証画面を作ります。 deviseについては他のブログで詳しく説明されているので割愛します。
まずは、devise をsetup します。
$ bundle exec rails g devise:install
setup が終わったら実際に認証を行いたいmodelを作成します。 今回は管理画面なので AdminUser というモデルで行いたいと思います。
$ bundle exec rails g devise views $ bundle exec rails g devise AdminUser $ bundle exec rake db:migrate
これで model ができあがりました。
次は認証が必要なページを作ります。
管理画面として /admin というページを作ることにします。
$ bundle exec rails g controller admin::base index
config/routes.rb に
get "/admin" => "admin/base#index"
を追記します。 /admin にアクセスすると 下記の様なページが表示されると思います。
ここに認証を書けます。
app/controller/admin/base_controller.rb
を編集します。
class Admin::BaseController < ApplicationController before_filter :authenticate_admin_user! def index end end
再度 /admin にアクセスすると下記のような認証画面が表示されると思います。
sign up からアカウントを作成します。 すると再び、/admin のページが表示されるようになりました。
一旦sign outしてから、再びsign inしてみます。
bundle exec rake routes
でsign outのurlを調べます。
すると/admin_uesrs/sign_out となっていると思います。 実際にそこへアクセスしても routing error になると思います。
これは /admin_users/sign_out が受け付けているのが delete メソッドになっているからなので、get method でsign out できるように修正します。
# config/initialize/devise.rb ・・・ # config.sign_out_via = :delete config.sign_out_via = :get ・・・
再び
bundle exec rake routes
を見ると get に変わっていると思います。
プロジェクトを再起動し、 /admin_users/sign_out にアクセスするとsign_out できると思います。
先ほど作ったユーザーでログインしてみましょう。 問題なくログインできると思います。
次に cancan で権限管理部分をつくります。
ソフトバンククリエイティブ
売り上げランキング: 84,756