权限Ruby Gem可以与已注销的用户一起使用吗?

时间:2013-04-20 00:17:22

标签: ruby-on-rails authority-gem

我收到以下错误:

  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

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

1 个答案:

答案 0 :(得分:8)

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

  

OK!为了其他人阅读这个问题,克里斯和我   聊天并同意最好的方法。这是要点   它

     

权限不会专门处理nil用户或提供特定选项   这样做。我们想要将权限限制为授权并保留   认证完全分开。如果没有用户登录,那就是   认证问题;权威无法有意义地回答   问题“这个用户可以做X吗?”如果没有给用户或其他东西   那个嘎嘎叫。

     

除了哲学观点,有认证处理这个   更好的用户体验。如果管理员忘记登录并且   尝试一些仅限管理员的行动,他们说这会让他们感到困惑   “拒绝访问”。说“请签名”会更有帮助   在”

     

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

     

像Devise的before_filter:authenticate_user!赛跑   在任何机构检查请求之前(因为任何行动   要求授权明确要求认证)。有他们的   用户方法返回一个像用户一样嘎嘎叫的NullUser对象   让他们的授权人知道如何处理那些权威机构可以做什么   如果你传递零或其他任何东西,do会改善它给你的错误   这不像用户那样嘎嘎叫。克里斯打算实施这个。

嗨,我刚刚把这个

  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