问题描述
在ability.rb
can :edit,Physician,user_id: user.id
如果我的理解是正确的,这应该查看控制器中的physician 实例,取其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