【问题标题】:Rails validate params in pundit policyRails 验证权威政策中的参数
【发布时间】:2020-06-30 15:39:45
【问题描述】:

我正在创建一个 trello 风格的应用程序,用户可以在其中在列表之间拖动卡片。我正在处理 js 端的所有重新排序逻辑,并将 list_idposition 发布到我的控制器中的 rails 更新操作:

card = authorize Card.find(params[:id])
card.update(card_params)

权威人士提供的授权方法如下所示:

def update?
  user.can_edit?(card.board)
end

这只是检查用户是否有权编辑版块。因为我允许list_id 属性,所以用户很可能通过 POST 将卡片移动到他无权访问的列表中。为了解决这个问题,我将这个条件添加到我的控制器中:

if current_user.can_edit? List.find(params[:list_id]).board
  // update card
else 
  // handle error
end

这个解决方案可以完成这项工作,但我不想在我的控制器中引入任何授权。我的权威政策无法访问card_params,模型也无法访问设计current_user,所以这似乎是唯一的方法。有没有办法可以将这种逻辑融入政策中?

【问题讨论】:

    标签: ruby-on-rails devise drag-and-drop authorization pundit


    【解决方案1】:

    我找到了解决办法,我只需要通过列表策略授权新列表:

    authorize List.find(params[:list_id])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多