Так что я не уверен, есть ли лучший способ сделать это, но я планировал реализовать некоторые базовые средства управления доступом в моем приложении rails.Что я хотел бы сделать, так это проверить current_user
, посмотреть, к какой компании они принадлежат, и оттуда определить, имеют ли они доступ к тому, к чему они стремятся.Их has_many
ассоциации компании, поэтому переход к компании на основе current_user
и оттуда была моя логика.
Однако есть одна проблема, с которой я сталкиваюсь: я не могу получить доступПеременная current_user
из ApplicationController.
Она просто не определена.
В соответствии с некоторыми предложениями Доступ к переменной devise current_user в контроллере rails , я мог бы просто добавить before_action :authenticate_user!
, ноэто уже в моем ApplicationController
.Кроме того, попытка вызова user_signed_in?
тоже не работает, потому что это неопределенный метод.
Я не понимаю, почему я могу вызывать метод authenticate_user!
с before_action
, но после этогоон не дает мне доступа к переменным.
Вот мой Application Controller.
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :configure_permitted_parameters, if: :devise_controller?
before_action :authenticate_user!
protected
def configure_permitted_parameters
attributes = [:first_name, :last_name, :email]
devise_parameter_sanitizer.permit(:sign_up, keys: attributes)
devise_parameter_sanitizer.permit(:account_update, keys: attributes)
end
def after_sign_out_path_for(resource_or_scope)
flash[:notice] = "You have successfully signed out."
new_user_session_path
end
end
Любые предложения о том, почему я не могу получить доступ к методу current_user
даже после authenticate_user!
метод вызывается?
Полагаю, альтернативой было бы добавить отдельные функции в каждый отдельный контроллер, чтобы проверить, есть ли у пользователя доступ к объекту в этом контроллере, но кажется, что это может превратиться в кошмар.
Спасибо за любые предложения.
РЕДАКТИРОВАТЬ
Здесь я позвонил current_user
и user_signed_in?
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :configure_permitted_parameters, if: :devise_controller?
before_action :authenticate_user!
binding.pry
protected
def configure_permitted_parameters
attributes = [:first_name, :last_name, :email]
devise_parameter_sanitizer.permit(:sign_up, keys: attributes)
devise_parameter_sanitizer.permit(:account_update, keys: attributes)
end
def after_sign_out_path_for(resource_or_scope)
flash[:notice] = "You have successfully signed out."
new_user_session_path
end
end
Там, где я разместил файл binding.pry, я пытался вызвать его вручную из консоли rails, как только приложение приостановилось, но в нем упоминалось, что оно недоступно.