我想限制仅限管理员访问我的pannel admin(gem active_admin)。
这是我的代码
class ApplicationController < ActionController::Base
def authenticate_admin!
unless current_user.is_admin?
flash[:error] = "Access denied"
redirect_to root_path
end
end
问题是:未定义的方法`is_admin?'为零:NilClass
我的数据库中有一个布尔管理员(0假,真1)
我要定义我的is_admin ?,但是我试着找不到他。那我该怎么做呢?
感谢您的帮助
答案 0 :(得分:0)
问题在于您的错误消息。 nil没有方法'is_admin?'。这意味着您的当前用户变量未设置。您需要将未登录的用户重定向到可以执行此操作的屏幕。然后通过此authenticate_admin!
函数指示他们,或者首先将所有管理员用户重定向到/admin
路径,或者只是将所有用户推送到您的主页,以便他们点击管理员链接。
答案 1 :(得分:0)
可能是current_user设置正确,但是当没有登录用户时会调用此方法。
您应该将此方法与另一个需要用户登录的过滤器结合使用,即需要定义current_user。这通常称为require_user
例如,在您的应用程序控制器中(因此它将被所有控制器继承)
before_filter :require_user
protected
def require_user
unless current_user
redirect_to "/" and return
end
end
然后使用skip_before_filter
为未登录的操作设置例外。
现在,您可以添加authenticate_admin!作为管理控制器中的前置过滤器:只有在传递了require_user时才会调用它,因此它应该是安全的。
答案 2 :(得分:0)
添加try:<% if current_user.try(:is_admin?) %>
答案 3 :(得分:-1)
尝试在before_action :authenticate_user!
方法之前添加:authentificate_admin!
(如果您的用户名为&#39; user&#39;)。在此更改之后,您的应用会首先将未登录的用户重定向到登录表单,然后才会询问您的用户是否是管理员?&#39;。