Ruby on rails 权限Ruby Gem能否用于已注销的用户?

Ruby on rails 权限Ruby Gem能否用于已注销的用户?,ruby-on-rails,authority-gem,Ruby On Rails,Authority Gem,我得到以下错误: undefined method `can_read?' for nil:NilClass ..尝试使用已注销的用户访问产品页面时。目前我有 class ProductAuthorizer < ApplicationAuthorizer def self.readable_by?(user) true end end 但是,这会导致问题,我的服务器甚至无法启动。好的,我在以下位置找到了它: 好的!为了其他读者的利益,克里斯和我 讨论并商定了最佳

我得到以下错误:

  undefined method `can_read?' for nil:NilClass
..尝试使用已注销的用户访问产品页面时。目前我有

class ProductAuthorizer < ApplicationAuthorizer

  def self.readable_by?(user)
    true
  end

end
但是,这会导致问题,我的服务器甚至无法启动。

好的,我在以下位置找到了它:

好的!为了其他读者的利益,克里斯和我 讨论并商定了最佳的实施方式。以下是本文的要点 它

权威机构不会专门处理零用户或提供特定选项 这样做。我们希望将权限限制为授权,并保持 认证完全独立。如果没有用户登录,则为 认证关注点;权威不能有意义地回答这个问题 问题“这个用户能做X吗?”如果没有给它一个用户或什么的话 那像个庸医

除了哲学上的观点之外,让身份验证处理这一点是非常重要的 更好的用户体验。如果管理员忘记登录并且 尝试一些仅限管理员的操作,这样说会让他们感到困惑 “拒绝访问”。说“请签字”会更有帮助 在“中”

使用权限的开发人员可以做的是:

使用类似Desive的before\u过滤器:验证用户身份!跑步 在对请求进行任何权限检查之前(因为 需要授权(显然需要身份验证)。有他们的 user方法返回一个像用户一样嘎嘎作响的NullUser对象,然后 让他们的授权人知道如何处理那些权威能够处理的事情 你要做的是改善它给你的错误,如果你通过零或任何其他 这不像用户那样嘎嘎作响。克里斯将实施这一计划

嗨,我刚把这个

  class ApplicationController < ActionController::Base
      def current_or_null_user
        if current_user == nil
          User.new
        else
          current_user
        end
     end
  end
  class ApplicationController < ActionController::Base
      def current_or_null_user
        if current_user == nil
          User.new
        else
          current_user
        end
     end
  end
Authority.configure do |config|
   config.user_method = :current_or_null_user
end