最近初めて、Rails内だけでユーザーの管理、ログインをする機能を実装しました。簡単にネットで調べた限りでは、『devise』と『cancancan』を使う方法が一番シンプルでしっくりきました。
こういった一般的な機能を実装するときにはRailsには本当に多様なライブラリがあるのが強みだなとつくづく感じます!
(07-02 21:55) 設定の追記やlocaleファイルのダウンロードなどを追記
🎂 次試すメモ
『mcasimir/devise-i18n-views』で翻訳したdeviseのviewを生成できそう。次試してみます!
🍮 Gemのインストール
Gemfile
に次のコードを追加して、bundle install
を実行。
# User Authorization |
👽 deviseの認証画面を作成
コンソール上で次のコマンドを実行。
# devise用の設定ファイルの作成 |
サインアウトをgetメソッドできるようにdeviseの設定を書き直し。vim config/initializers/devise.rb
を開いて次のように変更
config.sign_out_via = :delete |
🗽 deviseの設定
まずは、default_url_options
の設定。config/environments/development.rb
に以下を追加。
config.action_mailer.default_url_options = { host: 'localhost:3000' } |
次に、app/views/layouts/application.html.haml
に以下を追加。
%p.notice= notice |
🎉 翻訳ファイルのダウンロード
次のコマンドを実行して、日本語のlocaleファイルをダウンロード。ついでに英語のlocaleファイルも配置変え。
wget https://raw.githubusercontent.com/tigrish/devise-i18n/master/locales/ja.yml -P config/locales/devise/ |
🐹 ルーティングの書き直し
vim config/routes.rb
に管理画面へのルーティングを書き直し。
# 以下を削除 |
🏀 コントローラの書き直し
続いて、認証ユーザーのみが/admin
を見れるようにvim app/controllers/admin/base_controller.rb
に以下を追記。
class Admin::BaseController < ApplicationController |
😎 動作確認
まずはWebrickを起動。
bundle exec rails s |
起動したら、ブラウザでhttp://0.0.0.0:3000
を起動。
するとログイン画面がでるので、まずはユーザー登録のためにSign up
を選択してユーザーを作成。ユーザーの作成が完了してログインできると、Admin::Base#index
が表示で成功。
🎳 ユーザーの役割を分けて権限管理
次にAdminUser
にroleをつけて、権限管理をしつつcancanでログインユーザーを管理する手順です。コンソールで次のコマンドを実行します。
# AdminUserにroleを追加 |
😸 特定のroleだけが一部の情報を見れるようにする
app/models/admin_user.rb
に以下を追記。
(Rails 4。ゼロから採用された『enum』を使っています)
class AdminUser < ActiveRecord::Base |
app/models/ability.rb
に以下を追記。
class Ability |
app/views/admin/base/index.html.haml
に以下を追記。
%h1 Admin::Base#index |
vim app/views/devise/registrations/new.html.haml
にroleを追加。
.form-inputs |
app/views/devise/registrations/edit.html.haml
にroleを追加。
.form-inputs |
app/controllers/application_controller.rb
でroleをストロングパラメータで受け取れるように変更。
class ApplicationController < ActionController::Base |
これでrole = "admin"
のユーザーの場合はadmin information
が表示。
これでrole = "member"
のユーザーの場合はmember information
が表示。
便利便利。でもいろいろハマりました。勉強になったよ!
🤔 GitHubリポジトリ
morizyun/devise_cancan_sample_app - GitHub
今回のサンプルソースです。つっこみお願いします!
🍣 参考リンク
devise と cancan を使って権限管理可能な管理画面を作る。 (1) - @Konboi memo
devise と cancan を使って権限管理可能な管理画面を作る。 (2) - @Konboi memo
Rails3.2でユーザー権限を細かく設定~Devise + cancan | Scimpr Blog
🏈 編集来歴
(05-05 21:25) 新規作成
(07-02 21:55) 設定の追記やlocaleファイルのダウンロードなどを追記