我尝试使用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'}