【问题标题】:Devise 'user_signed_in?' not accessible from CanCan 'Ability' model设计'user_signed_in?无法从 CanCan 'Ability' 模型访问
【发布时间】:2013-06-15 18:10:10
【问题描述】:

我正在开发 Rails 应用程序,并设置了 Devise 并使用所有默认设置,并且正在设置 CanCan。

以下是'Ability'类的内容,(其实不是我的代码,根据几个教程);

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user_signed_in?
        can :manage, :all
    end
  end
end

我知道文件本身可以工作,因为我已将示例 authorize! :edit, @document 添加到我的一个控制器中。如果我删除if user_signed_in? 行(当然还有end),那么当can :manage, :all 行存在时,我可以访问document 控制器的操作,如果没有它,它会显示“拒绝访问” .

但是,当我尝试在存在 user_signed_in? 行的情况下执行此操作时,出现以下错误;

DocumentsController#edit 中的 NoMethodError

未定义的方法`user_signed_in?' #

而且,有趣的是,user_signed_in? 在我的视图中完美运行,我在其中显示一个登录框或带有 if ... else 块的当前登录用户的详细信息。

有什么办法可以在这里访问user_signed_in? 吗?从长远来看,我打算从用户记录中读取一个值来识别他们的访问级别,但重要的是这个概念有效,因为变量将来自同一个地方!

谢谢!

【问题讨论】:

    标签: ruby-on-rails devise cancan


    【解决方案1】:

    我不确定您到底要做什么,但您可以将Devise::Controllers::Helpers 包含到Ability 类中,然后将user_signed_in? 替换为signed_in?(:user)

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多