ruby-on-rails - 在 Rails 方法中的特定点跳过授权
问题描述
我有一个 if else 语句,我在其中检查之前是否选择了某些公司。如果列表为空,我想传递 @companies = "Empty" 以便我可以使用它来呈现不同的视图。然而,Pundit 需要提供一家公司。
有没有办法在方法的特定点跳过授权?在这种情况下,请在评论处跳过#Skip authorize @companies here?
policy_scope(Company)
if params[:query].present?
if (Company.search_by_name_and_category(params[:query].capitalize) - @selected_companies).empty?
@companies = "Empty"
# Skip authorize @companies here
else
@companies = (Company.search_by_name_and_category(params[:query].capitalize) - @selected_companies)
@companies.each {|company| authorize company }
end
else
@companies = Company.all - @selected_companies
@companies.each {|company| authorize company }
end
解决方案
Apart from skipping the authorization conditionally, i would do following changes to the code to reduce the queries and code lines:
policy_scope(Company)
@companies = params[:query].present? ?
Company.search_by_name_and_category(params[:query].capitalize) :
Company.all
@companies -= @selected_companies
if @companies.blank?
skip_authorization
else
@companies.each { |company| authorize company }
end
推荐阅读
- python - 如何使用Python删除Excel文件中具有特定值的列中的行
- css - 在移动视图中为 Woocommerce 类别存档页面创建两列
- html - 如何使用 BeautifulSoup 提取表中的所有元素?
- amazon-cognito - AWS 将 Cognito 用户池身份提供商设置为其他用户池
- java - 如何使用 Query、QueryBuilder 和 Test 类在 java 项目的输出中消除打印对象内存位置?
- flutter - 如何将小部件与线连接以构建例如节点图?
- quarkus - Quarkus 如何处理并发请求?
- python - 使用 Flopy 创建 vtk 输出
- django - 如何将 unique_together 约束添加到具有先前数据的 Django 表
- ios - 如何在 BarButtonitem 中检测长按