Question

Je suis en train d'obtenir la méthode permit au travail en utilisant Rails-autorisation-plugin et authlogic , et je continue à courir dans cette erreur:

Lorsque je tente:

class ApplicationController < ActionController::Base
  ...
  before_filter permit 'admin'
  ...

Je reçois ceci:

Authorization::CannotObtainUserObject in HomeController#index
Couldn't find #current_user or @user, and nothing appropriate found in hash

Maintenant, j'ai ma configuration de méthode current_user, et il fonctionne, parce que je l'ai utilisé à peu près partout ailleurs dans mon application:

class ApplicationController < ActionController::Base
  ...

  helper_method :current_user

  private

  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.record
  end

  ...

Je sais aussi que j'ai des utilisateurs avec les rôles appropriés dans ma base de données, parce que cette méthode fonctionne:

def require_admin
   unless current_user.is_admin? || current_user.is_root?
      flash[:warning] = 'You are not an administrator and cannot access this page.'
      redirect_to root_path
   end
end

Je peux travailler de tout faire si je viens vérifier le niveau de l'utilisateur en utilisant ceci:

before_filter :require_admin, :only => 'index'

... mais je ne devrais pas être en mesure de la même chose efficacement avec permit et permit??

Toute aide serait très appréciée. Faites-moi savoir si vous avez besoin de voir plus de code et je serai heureux de le poster. Il n'y a vraiment rien sur Google que je peux faire la queue-ou-têtes de ces deux concernant l'obtention des systèmes pour travailler ensemble.

Était-ce utile?

La solution

D'accord, je pense que je compris.

Jared souligné à juste titre, l'utilisation correcte est

permit 'admin'

(pas dans le cadre d'un before_filter).

CEPENDANT ...

... la :get_user_method par défaut est réglé sur #current_user, qui est ce que le plugin utilise acts_as_authenticated. I, comme indiqué plus haut, je utilise AuthLogic, dans où j'ai la méthode définie comme current_user (sans le signe dièse).

Alors, je l'avais essayé ce qui suit:

permit 'admin', :get_user_method => current_user

Seulement pour être accueilli par un joli message d'erreur expliquant que je n'avais pas une telle variable ou méthode. Ce que je manque, cependant, est que l'option de hachage prend une chaîne , pas un appel direct à la méthode !! (Erreur stupide, je sais!)

permit 'admin', :get_user_method => 'current_user'

... semble fonctionner pour moi.

I love Ruby et Rails, mais parfois sa simplicité peut être une malédiction de son propre; Je suis toujours possédée par les choses simples. :)

Autres conseils

Vous utilisez le plug-in de manière incorrecte. Il ne doit pas être placé dans un filtre avant.

Au niveau mondial, vous déclarez simplement:

permit 'admin'

Voilà.

Toutes vos actions chercher un objet ou current_user @user et rediriger vers la page de connexion sinon.

Sur un niveau que vous utilisez par action, comme un bloc:

def index
  permit 'admin' do
    @some_models = SomeModel.all
  end
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top