2011-05-17 3 views
0

Je suis en train de mettre en œuvre des rôles avec Authlogic pour restreindre l'accès du contrôleur dans mon application rails. Dès que je l'implémente avec load_and_authorize et filter_resource_access, je ne peux accéder au contrôleur sous aucun rôle.
Dans mon modèle d'utilisateur, j'ai un champ de rôle, qui a de nombreux rôles_users qui pointe vers le modèle des rôles. Donc, l'utilisateur 1 est 'admin', a une attribution de rôle 1, qui est liée au rôle 1 qui est 'admin'.Impossible d'autoriser avec Cancan et Authlogic

ability.rb

include CanCan::Ability 

def initialize(user) 
user ||= User.new # guest user 
can :read, InstallQuote 
can :create, InstallQuote 
if user.role? :admin 
    can :manage, :all 
end 

application_controller.rb

helper :all 
protect_from_forgery # See ActionController::RequestForgeryProtection for details 
helper_method :current_user_session, :current_user 

rescue_from CanCan::AccessDenied do |exception| 
flash[:error] = exception.message 
    redirect_back_or_default(root_path) 
end 

before_filter { |c| Authorization.current_user = c.current_user } 
filter_parameter_logging :password, :password_confirmation 

protected 
    def current_user_session 
    return @current_user_session if defined?(@current_user_session) 
    @current_user_session = UserSession.find 
    end 

def current_user 
    return @current_user if defined?(@current_user) 
    @current_user = current_user_session && current_user_session.user 
end 

clients_controller.rb

class ClientsController < ApplicationController 
# before_filter :authenticate, :only => [:edit, :update, :show, :index] 

load_and_authorize_resource # For declarative authorization 
filter_resource_access 

# belongs_to :company 
# before_filter :require_user, :only => [:edit, :update, :index, :destroy] 
# before_filter :admin_user, :only => :destroy 
helper_method :sort_column, :sort_direction 
before_filter :correct_user, :only => [:edit, :update, :show, :index] 

user.rb

acts_as_authentic 
has_many :roles_users 
has_many :roles, :through => :roles_users 
before_create :setup_role 
attr_accessible :email, :login, :first_name, :last_name, :role_id, :password, :password_confirmation, :active 

(J'ai commenté l'ancien code que je ne veux pas abandonner pour l'instant).

Quelqu'un sait-il ce que je manque?

Répondre

0

Assurez-vous que vous êtes connecté et user.role? :admin renvoie true.

Si ce n'est pas la raison, vous pouvez directement déboguer dans la console:

user = User.first 
ability = Ability.new(user) 
ability.can? :read, Client