5

私は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] 

わかりづらくてすみません。

4

3 に答える 3