私はRuby on Railsを初めて使用します。現在、認証システムにDevise gemを使用したいと考えています。システムには、管理者だけがユーザーを一覧表示して新しいユーザーを作成できるようにする必要があります。(Devise によって生成された User モデルに admin ブール フィールドを追加して、admin ロールを追加しました)。Rails 3.2、Ruby 1.9.3、および最新の Devise gem を使用しています。
ただし、以下にリストされているコードは、認証されていないユーザーが特定のアクション (インデックス作成、新規作成、および作成) にアクセスすることを妨げません。
# users_controller.rb
class UsersController < Devise::RegistrationsController
before_filter :authenticate_user!, only: [:index, :new, :create]
before_filter :is_admin, only: [:index, :new, :create]
def index
end
private
def is_admin
current_user.admin?
end
end
==
# config/routes.rb
App::Application.routes.draw do
root to: 'static_pages#home'
get '/about', to: 'static_pages#about'
devise_scope :user do
get '/users', to: 'users#index'
end
devise_for :users, controllers: { sessions: "sessions", registrations: "users" }
end
このauthenticate_user!
メソッドは機能しません (たとえば、認証されていないユーザーは引き続き/users
またはにアクセスできます/users/sign_up
)、例外も発生しません。私はいくつかの検索を行いましたが、理由はわかりません。助けてください。
PS。私の英語でごめんなさい。
アップデート
すべての回答に感謝します。is_admin
指摘されたとおりに正しく機能するように更新します。
しかし、ここでの主な問題は、ログインしていないユーザーがauthenticate_user!
最初にフィルターを通過できることです (is_admin
ここでの current_user は nil であるため、メソッドで例外が発生します)。
# Here non logged in users does not redirect to sign in page when access to,
# for example, /users or /users/sign_up.
before_filter :authenticate_user!, only: [:index, :new, :create]
わかりづらくてすみません。