操作之前使用Devise和STI进行身份验证不起作用

时间:2016-07-07 12:23:44

标签: ruby-on-rails devise

我尝试使用before_action :authenticate_admin!来确定当前用户是否是管理员。我正在使用具有单表继承(STI)的设计。

这是我的用户模型;

class User < ApplicationRecord
  def admin?
    false
  end
  devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable, :lockable
end

我的管理员模型;

class Users::Admin < User
  def devise_scope
    :admin
  end

  def admin?
    true
  end
end

为了测试设计,我在路线文件中有这个;

authenticated :user, ->(u) { u.admin? } do
  resources :teams
end

事实上,如果我以不同的用户类型登录(因此不是管理员),我就无法访问该资源。

但这不起作用;

class Teams < ApplicationController
  before_action :authenticate_admin!

  def index

  end
end

我收到了错误;

  

未定义的方法`authenticate_admin!&#39;

Rails相当新,所以我不明白如何解决这个问题。

更新

我不得不把它放在路线文件中;

devise_for :admins, class_name: 'Users::Admin'

以前我只有;

devise_for :users, controllers: {sessions: 'users/sessions'}

0 个答案:

没有答案