我将与您分享一种简单的方法。
创建一个向您的设计用户添加布尔值的迁移:
rails g migration AddsAdminColumnToUsers
def change
add_column :users, :admin, :boolean, default: false, null: false
end
这将映射回您的模型并创建一个user.admin? 方法。
对于页面访问,我会在 ApplicationController 中创建一个方法,或者更好的是一个名为 AuthenticateAdmin 的控制器关注点。
在其中一个中,创建一个名为 authenticate_admin! 的方法。
def authenticate_admin!
authenticate_user!
redirect_to :somewhere, status: :forbidden unless current_user.admin?
end
附注如果在ApplicationController 内,还要确保这是一个protected 方法
然后对于您需要限制的每个控制器或操作:
before_action :authenticate_admin!, only: [:action] # `only` part if applicable
您想在此处发送forbidden。
原因超出了这个问题的范围,但本质上Not Found 与没有被授权做某事不同。
在 HTTP 状态代码中,有一个 Unauthenticated,但在这种情况下,我们是经过身份验证的,该人只是被禁止访问该页面(即未经授权)。
这种情况需要 HTTP 状态 403 Forbidden。