cancancan 能力返回 false 但仍然可以访问?

问题描述

我有一个标准的康康设置。文章模型有一个属性 approved。然后是标准设置:

# articles controller

load_and_authorize_resource only: [:index,:show] 

def show 
end
# ability.rb

    # Solution 1
    # can :show,Article,{ approved: true }


    # Solution 2
    can [:show],[Article] do |article|
      article.approved? 
    end

当我尝试任一解决方案时,结果在控制台或调试器中按预期返回(即,如果文章已获批准,ability.can?(:show,@article) 返回 true,否则返回 false)。

奇怪的是,当上面返回的 false 明确指出它不应该被访问时,显示视图仍然可以在浏览器中访问。

我不明白为什么?

解决方法

在另一个论坛上调试了很多帮助之后,我们一直没有弄清楚为什么上面的方法不起作用。但是通过不使用 load_and_authorize_resource 而是将其放置在控制器操作中来实现所需的行为:

authorize! :show,@article

我很想知道为什么这种方法有效,但最初的方法无效。