Я использую Pundit для авторизации действий в своих контроллерах. Моей первой попыткой было авторизовать модель в хуке after_action:
class CompaniesController < InheritedResources::Base
after_action :authorize_company, except: :index
def authorize_company
authorize @company
end
Это позволило мне использовать действия контроллера по умолчанию, которые определяют @company
, чтобы я не обращался к базе данных дважды. Но это плохо для деструктивных действий, потому что это не санкционирует действие после того, как я уже испортил базу данных.
Итак, я перешел на использование хука before_action
:
class CompaniesController < InheritedResources::Base
before_action :authorize_company, except: :index
def authorize_company
@company = Company.find(params.require(:id))
authorize @company
end
Теперь я не разрешаю неавторизованным людям удалять ресурсы и т. д., но я дважды обращаюсь к базе данных. Есть ли способ получить доступ к @company
без двойного обращения к базе данных?