首页 > 解决方案 > 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),我认为一些康康魔术/默认设置没有按应有的方式应用。

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

标签: ruby-on-railsruby-on-rails-6cancancancancan

解决方案


我认为您错过了应该引起未经授权的响应的支票。在你的行动中,你应该有这样的事情:

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

看看gem wiki


推荐阅读