【发布时间】:2020-06-30 15:39:45
【问题描述】:
我正在创建一个 trello 风格的应用程序,用户可以在其中在列表之间拖动卡片。我正在处理 js 端的所有重新排序逻辑,并将 list_id 和 position 发布到我的控制器中的 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