【问题标题】:cancancan ability returns false but is still accessible?cancancan 能力返回 false 但仍可访问?
【发布时间】:2021-07-11 13:30:36
【问题描述】:

我有一个标准的 cancancan 设置。 Article 模型具有属性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 明确指出它不应该被访问时,显示视图仍然可以在浏览器中访问。

我不知道为什么?

【问题讨论】:

    标签: ruby-on-rails cancan cancancan


    【解决方案1】:

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

    authorize! :show, @article
    

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

    【讨论】:

      猜你喜欢
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 2018-09-07
      • 2015-11-25
      • 2011-04-07
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多