我收到以下错误:
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
但是,这会导致问题,我的服务器甚至无法启动。
答案 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