Abr*_*ram 3 ruby-on-rails authority-gem
我收到以下错误:
undefined method `can_read?' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
..当试图访问已注销用户的产品页面时.目前我有
class ProductAuthorizer < ApplicationAuthorizer
def self.readable_by?(user)
true
end
end
Run Code Online (Sandbox Code Playgroud)
我想允许甚至未登录的用户查看该页面.这可能吗?
我尝试将默认用户方法更改为:
config.user_method = :current_user ||= User.new
Run Code Online (Sandbox Code Playgroud)
但是,这会导致问题,我的服务器甚至都无法启动.
好的我在https://github.com/nathanl/authority/pull/32上找到了这个:
好!为了让其他人阅读这个问题,克里斯和我聊天并同意了最好的方法.这是它的要点.
管理局不会专门处理零用户或提供特定选项.我们希望将权限限制为授权并将身份验证完全分开.如果没有用户登录,那就是认证问题; 权威无法有意义地回答"这个用户可以做X吗?"的问题.如果没有给用户或类似庸医的东西.
除了哲学观点,拥有身份验证处理这是一个更好的用户体验.如果管理员忘记登录并尝试某些仅限管理员的操作,那么他们会说"拒绝访问"会让他感到困惑.说"请登录"会更有帮助.
使用Authority的开发人员可以做的是:
有类似Devise的before_filter:authenticate_user!在任何权威机构检查请求之前运行(因为任何需要授权的操作显然需要身份验证).让他们的用户方法返回一个像用户一样嘎嘎叫的NullUser对象,然后让他们的授权者知道如何处理那些权限可以改善它给你的错误,如果你传递nil或其他任何不像用户那样嘎嘎叫.克里斯打算实施这个.
嗨,我刚才这个
class ApplicationController < ActionController::Base
def current_or_null_user
if current_user == nil
User.new
else
current_user
end
end
end
Run Code Online (Sandbox Code Playgroud)
...
Authority.configure do |config|
config.user_method = :current_or_null_user
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |