CanCan 能力忽略应该禁止访问的条件? 我认为正在发生的事情

问题描述

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...