我通过添加admin属性为Devise添加了一个管理员角色。
您能告诉我这是否是创建需要管理员用户签名的before_filter的正确方法:
在任何控制器中:
before_filter :authenticate_admin!
在application_controller
中protected
unless current_user.try(:admin?)
redirect_to :new_user_session_path
end
答案 0 :(得分:22)
采用这种方法
before_filter :authenticate_user!
before_filter do
redirect_to new_user_session_path unless current_user && current_user.admin?
end
这也确保了任何客人也被迫登录。您无需修改默认方法来强制身份验证只是为了访问实例方法admin?
def admin?
self.admin == true
end
我的方法是创建一个角色属性并根据一组预期角色检查其字符串值 - 这种方式更加灵活,而不是必须创建许多布尔属性。
答案 1 :(得分:1)
看看上面的答案(Michael De Silva),我对他使用的代码有疑问。他将路径写为符号(:new_user_session_path
),但我需要它作为常规路径助手(new_user_session_path
)。在我改变这个之前,我遇到了错误,说道路无效。 (我正在运行Rails 5.)
希望这对其他人有帮助!