4

我正在尝试将注册限制为 Devise 管理员。如果可能的话,我想暂时避免使用 CanCan。我已经创建了一个单独的 Devise Admin 模型,如选项 #1 中所述:https ://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role 。

接下来,我为用户设置了一个 CRUD 界面,如下所述:https ://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface 。

我想通过before_filter :authenticate_admin!在用户控制器中使用类似的东西来限制新注册,但由于某种原因,它不限制新注册。

我的 routes.rb 看起来像这样:

devise_for :admins
devise_for :users, :path_prefix => 'd'
resources :admins
resources :users, :controller => "users"

有什么想法为什么before_filter :authenticate_admin!不限制新注册?

4

3 回答 3

9

您不能before_filter :authenticate_admin!在用户控制器中使用,因为 admin 和 user 在您的应用程序中是两个不同的模型。

我不知道我是否完全理解你的意思,但如果你不想接受用户(或管理员)的新注册,你可以这样做:

# in your User(Admin) model
devise :registerable # remove :registerable

希望这可以帮助!

于 2012-04-05T00:38:54.443 回答
2

我正在寻找类似的东西;完全禁用新注册。我在某处的邮件列表中找到了这个,虽然它解决了我的问题,但它可能是你的一个不错的起点:

class RegistrationsController < Devise::RegistrationsController 
  def new
    flash[:failure] = t('registrations.registrations_disabled')
    redirect_to root_path
  end
end

也许类似的东西,但添加一个检查,看看 current_user 是否是管理员,然后基于此重定向......

于 2012-04-05T00:45:12.783 回答
2

我想了一会儿,终于想到了这个。

devise 创建的每个模型都有一个辅助函数

class UsersController < Devise::RegistrationsController

  before_filter :authenticate_admin!

  def new
    if admin_signed_in?
      super
    else
      redirect_to admin_session_path
    end
   end

希望这可以帮助。它就像一个魅力:)

于 2015-06-01T14:24:34.623 回答