[英]Rails validate params in pundit policy
我正在创建一个 trello 风格的应用程序,用户可以在其中在列表之间拖动卡片。 我正在处理 js 端的所有重新排序逻辑,并将list_id
和position
发布到我的 controller 中的 rails 更新操作:
card = authorize Card.find(params[:id])
card.update(card_params)
权威人士提供的授权方法如下所示:
def update?
user.can_edit?(card.board)
end
这只是检查用户是否有权编辑板。 因为我允许list_id
属性,所以用户可以很好地进行 POST 以将卡片移动到他无权访问的列表中。 为了解决这个问题,我在我的 controller 中添加了这个条件:
if current_user.can_edit? List.find(params[:list_id]).board
// update card
else
// handle error
end
这个解决方案可以完成这项工作,但我不想在我的 controller 中引入任何授权。 我的权威政策无权访问card_params
,并且 model 无权访问 devise current_user
,所以这似乎是唯一的方法。 有没有办法可以将这种逻辑融入政策?
我找到了解决方案,我只需要通过列表策略授权新列表:
authorize List.find(params[:list_id])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.