【发布时间】:2020-03-12 19:05:07
【问题描述】:
我正在使用 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而不访问数据库两次?
【问题讨论】:
标签: ruby-on-rails controller pundit