CanCan 能忽略一个应该禁止访问的条件吗?

CanCan ability ignores a condition that should disallow access?

ability.rb

can :edit, Physician, user_id: user.id

如果我的理解是正确的,这个应该看controller中physician的实例,取其user_id属性,只有匹配当前用户id才允许访​​问

相反,任何人都可以访问任何其他人的 edit 操作! (不好)

我认为发生了什么

我有一个用于编辑操作的自定义路由:

get 'physicians/:physicianname/edit' => 'physicians#edit'

在编辑控制器中:

@physician = Physician.find_by(physicianname: params[:physicianname])

由于我没有以通常的方式(使用 :id)查找医生,我认为一些 cancan magic/defaults 没有按应有的方式申请。

但我不知道为什么,也不知道我必须做什么才能让它发挥作用。

我认为您错过了应该引发未授权响应的检查。在你的行动中,你应该有这样的东西:

  @physician = Physician.find_by(physicianname: params[:physicianname])
  authorize! :edit, @physician

看看gem wiki