ruby-on-rails - CanCan 能力忽略一个应该禁止访问的条件?
问题描述
在ability.rb
can :edit, Physician, user_id: user.id
如果我的理解是正确的,这应该查看控制器中的医生实例,获取其user_id
属性,并且仅在与当前用户 id 匹配时才允许访问。
相反,任何人都可以访问其他人的edit
操作!(坏的)
我认为正在发生的事情
我有一个编辑操作的自定义路线:
get 'physicians/:physicianname/edit' => 'physicians#edit'
在编辑控制器中:
@physician = Physician.find_by(physicianname: params[:physicianname])
由于我没有以通常的方式查找医生(使用 :id),我认为一些康康魔术/默认设置没有按应有的方式应用。
但我不知道为什么,或者我必须做什么才能让它发挥作用。
解决方案
我认为您错过了应该引起未经授权的响应的支票。在你的行动中,你应该有这样的事情:
@physician = Physician.find_by(physicianname: params[:physicianname])
authorize! :edit, @physician
看看gem wiki
推荐阅读
- jena - 如何在自定义内置原语中添加三元组以进一步查询?
- sql-server - 如何在更新语句中使用变量名作为表名
- prometheus - Muti DC Alertmanager HA 设置
- powershell - Powershell 上 Python 命令的别名给出错误:“找不到默认 Python。”
- python-3.x - 尝试执行转置卷积但缺少一个像素
- r - 仅按行保留重复值
- mpeg - 我不明白如何解析文件 .ts
- html - HTML5 中的主要标签是什么?它与身体标签有何不同?
- javascript - 如何在 Google Treemap 中获取选定的节点级别
- c# - 使用 IDataErrorInfo 捕获异常