问题描述
我有一个标准的康康设置。文章模型有一个属性 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
我很想知道为什么这种方法有效,但最初的方法无效。