3

我收到以下错误:

  undefined method `can_read?' for nil:NilClass

..当尝试使用已注销的用户访问产品页面时。目前我有

class ProductAuthorizer < ApplicationAuthorizer

  def self.readable_by?(user)
    true
  end

end

我想允许甚至未登录的用户查看该页面。这可能吗?

我尝试将默认用户方法更改为:

config.user_method = :current_user ||= User.new

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

4

1 回答 1

8

好的,我在https://github.com/nathanl/authority/pull/32找到了这个:

好的!为了其他阅读此问题的人,我和 Chris 聊了聊,并商定了最好的方法。这是它的要点。

当局不会专门处理 nil 用户或给出这样做的特定选项。我们希望将授权限制为授权并保持身份验证完全独立。如果没有用户登录,那就是身份验证问题;权威无法有意义地回答“这个用户可以做 X 吗?”这个问题。如果它没有给用户或类似的东西。

除了哲学观点之外,拥有身份验证处理这是一种更好的用户体验。如果管理员忘记登录并尝试一些仅限管理员的操作,那么说“访问被拒绝”会让他们感到困惑。说“请登录”会更有帮助。

使用权威的开发者可以做的是:

有类似 Devise 的 before_filter :authenticate_user 的东西!在对请求进行任何授权检查之前运行(因为任何需要授权的操作显然都需要身份验证)。让他们的用户方法返回一个像用户一样嘎嘎作响的 NullUser 对象,然后让他们的授权者知道如何处理那些权威可以做的是改善它给你的错误,如果你通过 nil 或其他任何不像用户那样嘎嘎作响的东西. Chris 将实现这一点。

嗨,我刚刚放了这个

  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
于 2013-04-20T01:01:14.213 回答