所以在我的rails应用程序中,我有不同权限的用户 . 当有人登录时,一切都很完美 . 但是,当没有人登录时,我收到以下错误:
Undefined method 'editor?' for nil:NilClass
def require_editor
redirect_to '/error' unless current_user.editor? || current_user.admin?
end
我想我明白为什么会发生这种情况:因为没有人登录,Rails正试图弄清楚他们有什么角色,并且因为没有人没有登录它的角色,Rails不知道它是否应该显示页面与否 .
我的问题是:如何为未登录的人创建默认角色,并将其发送到错误页面,表明他们没有权限?
3 回答
您当前正在
nil
对象上调用editor?
,这会引发错误 . 通过使用上述技术,您首先检查以确保current_user
不是nil
,然后对current_user
执行检查(如果存在),如果不存在则返回false并重定向到/error
URL .我通常做这样的事情:
然后简单
这可以通过使用CanCanCan并从控制器中提取授权逻辑来简化 . 通过设置cancan功能,控制器代码通常如下所示:
在
ApplicationController
内部创建一个重定向到错误页面的方法,然后仅在您要确保用户已登录的操作上添加before_action
ApplicationController
控制器你想提出这个错误
如果您使用
devise
gem,则需要callback/filter来进行身份验证