Проверьте права пользователя до предоставления доступа, используя Devise и Rails - PullRequest
0 голосов
/ 20 сентября 2018

Так что я не уверен, есть ли лучший способ сделать это, но я планировал реализовать некоторые базовые средства управления доступом в моем приложении 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, как только приложение приостановилось, но в нем упоминалось, что оно недоступно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...