微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。