设计before_filter authenticate_admin?

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

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

在任何控制器:

before_filter :authenticate_admin! 

在application_controller中

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

采用这种方法

  before_filter :authenticate_user! before_filter do redirect_to new_user_session_path unless current_user && current_user.admin? end 

这也确保了任何客人也被迫登录。 您不需要修改默认方法来强制身份validation只是为了访问实例方法admin?

 def admin? self.admin == true end 

我的方法是创建一个角色属性并根据一组预期角色检查其字符串值 – 这种方式更灵活,而不是必须创建许多布尔属性。

看看上面的答案(Michael De Silva),我对他使用的代码有一个问题。 他将路径写为符号( :new_user_session_path ),但我需要它作为常规路径助手( new_user_session_path )。 直到我改变了这一点,我才得到错误,说道路无效。 (我正在运行Rails 5.)

希望这对其他人有帮助!