@Konboi memo

主に技術に関してつらつらと。

devise と cancan を使って権限管理可能な管理画面を作る。 (1)

はじめに

今回 devise と cancan を使って簡単な権限管理可能な画面をサンプルを作ったので それのメモです。

環境構築

まずはプロジェクトを作ります。

rails new sample-project -d mysql

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 で権限管理部分をつくります。

Rails3レシピブック 190の技
高橋 征義 松田 明 諸橋 恭介
ソフトバンククリエイティブ
売り上げランキング: 84,756