设计before_filter authenticate_admin?

时间:2011-09-14 05:17:49

标签: ruby-on-rails

我通过添加admin属性为Devise添加了一个管理员角色。

您能告诉我这是否是创建需要管理员用户签名的before_filter的正确方法:

在任何控制器中:

before_filter :authenticate_admin!

在application_controller

protected
  unless current_user.try(:admin?)      
    redirect_to :new_user_session_path      
  end

2 个答案:

答案 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.)

希望这对其他人有帮助!