Rails d'autorisation Plugin erreur
-
20-09-2019 - |
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.
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