認証用プラグインrestful_authentication+ユーザーテーブル拡張して管理者権限判定
でけたー
①管理者用のアクションとviewを追加
portal_controller.rb
class PortalController < ApplicationController # 認証が必要 before_filter :login_required def index end def secret p 'secret()in..', params p current_user.admin raise 'authrize admin error!' unless current_user.admin end end
view/portal/secret.html.erb
<h1>管理者の秘密のページ</h1> <p><%= current_user.name %>さん、あなたは管理者ですね☆</p> <p>管理者フラグ:<%= current_user.admin %></p> <%= link_to('トップページに戻る',{:controller => "portal", :action => "index"}) %> <%= link_to 'ログアウト', logout_url %>
②インデックスページに、管理者ページ用へのリンクを追加
view/portal/index.html.erb
<h1>Portal#index</h1> <p>Find me in app/views/portal/index.html.erb</p> <p><%= current_user.name %>さん、ようこそ</p> <p>管理者フラグ:<%= current_user.admin %></p> <%= link_to('管理者専用ページへ',{:controller => "portal", :action => "secret"}) %> <%= link_to 'ログアウト', logout_url %>
③ユーザ登録画面で、管理者かどうかを設定できるように修正
view/user/new.html.erb
<%= error_messages_for :user %> <% form_for :user, :url => users_path do |f| -%> <p><label for="login">社員番号</label><br/> <%= f.text_field :login %></p> <p><label for="name">氏名</label><br/> <%= f.text_field :name %></p> <p><label for="email">Email</label><br/> <%= f.text_field :email %></p> <p><label for="password">Password</label><br/> <%= f.password_field :password %></p> <p><label for="password_confirmation">Confirm Password</label><br/> <%= f.password_field :password_confirmation %></p> <!-- ★追加★ --> <p><label for="admin">管理者の場合はチェック</label><br/> <%= f.check_box :admin %></p> <p><%= submit_tag 'Sign up' %></p> <% end -%>
④管理者の場合
ログイン後の画面。管理者ページへのリンクを押すと、、
管理者ページに行けた
⑤一般ユーザの場合
ログイン後の画面。管理者ページへのリンクを押すと、、
例外発生。(余談:メッセージはちゃんとactionで設定したものになっている)
今回は、ただ例外を投げるだけの処理にしてしまったが、ユーザ情報の管理者フラグを見て
あとは任意の処理をしてやればOK(のハズ)