Стимульный рефлекс доступа к переменной контроллера приложения

Я использую эту переменную экземпляра (@profile), объявленную в контроллере приложения, чтобы проверить, есть ли у текущего пользователя права на доступ к параметрам [:profile_id]

class ApplicationController < ActionController::Base
  before_action :set_profile

 def set_profile
    if params[:profile_id].present? && current_user
      @profile = Profile.joins(:ownerships).find_by(profiles: {id: params[:profile_id]}, ownerships: {user: current_user})
    end
  end 
end

Как мне получить доступ к той же переменной @profile в действии Reflex? В противном случае любой пользователь мог бы изменить DOM и отредактировать поле Id.

class ItemGroupReflex < ApplicationReflex
   def state
      Post.find_by(id: element.dataset[:id], profile: @profile).update(state: 'enabled')
  end
end 

1 ответ

Решение

Нет прямого способа доступа к методам или instance_variables вашего ApplicationController, так как он будет создан только после вашего рефлекса.

Но вы можете создать тот же метод в своем ApplicationReflex в before_reflex Перезвони:

# app/reflex/application_reflex.rb

class ApplicationReflex < StimulusReflex::Reflex
  before_reflex :set_profile

 def set_profile
    if params[:profile_id].present? && current_user
      @profile = Profile.joins(:ownerships).find_by(profiles: {id: params[:profile_id]}, ownerships: {user: current_user})
    end
  end 
end

Чтобы иметь доступ к вашему current_user, убедитесь, что он доступен на application_controller/connection, ищите аутентификацию в документации.

Конечно, вы также можете выделить этот метод в проблему или модуль, чтобы у вас была только одна реализация.

Другие вопросы по тегам