Sono nuovo a Ruby on Rails, attualmente voglio usare Devise gem per il sistema di autenticazione. Il sistema deve avere solo l'amministratore può elencare gli utenti e creare un nuovo utente. (Ho aggiunto il ruolo di amministratore aggiungendo il campo booleano di admin al modello User generato da Devise). Uso Rails 3.2, Ruby 1.9.3 e l'ultima gemma Devise.Rails Devise authenticatate_user non funziona
Tuttavia, i codici elencati di seguito non impediscono agli utenti non autenticati di accedere a azioni specifiche (indice, nuovo e creazione).
# 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
Il metodo authenticate_user!
non funziona (per esempio, gli utenti non autenticati possono ancora accedere al /users
o /users/sign_up
), ma anche non solleva eccezioni. Ho fatto delle ricerche ma non ho idee sul perché. Per favore aiuto.
PS. Mi scusi per il mio inglese.
UPDATE
Grazie per tutte le risposte. Aggiornerò is_admin
per funzionare correttamente come indicato.
Ma il problema principale qui è che gli utenti non registrati possono passare il filtro authenticate_user!
in primo luogo (e generare un'eccezione sul metodo is_admin
poiché current_user qui sarebbe nullo).
# 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]
Mi dispiace per non essere ovvio.
Utilizzare gemma [CanCan] (https://github.com/ryanb/cancan). – Hauleth
Controlla la mia risposta aggiornata – bluehallu
Grazie mille ragazzi. Cercherò. –