2012-04-04 15 views
3

申し込みをDevise管理者に制限しようとしています。可能であれば、今CanCanの使用を避けたいと思います。オプション#1に記載されている別のDevise Adminモデルを作成しました:https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-RoleDeviseを使用してサインアップを管理者に制限する方法

次に、ここで説明するようにユーザー用の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!が新しいサインアップを制限されていませんか?

答えて

8

adminとuserが異なる2つのモデルであるため、before_filter :authenticate_admin!をUsersコントローラで使用することはできません。

私は完全にあなたが何を意味するか理解していれば、私は知らないが、あなたは、ユーザー(または管理者)のための新たな登録を受け入れるようにしたくない場合は、この操作を行うことができます。

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

・ホープこのことができます!

+0

管理者ロールを追加するときに 'before_filter:authenticate_admin!'を使用できるはずです。これは現在、私のためにユーザーインデックスとショーアクション(ユーザーを管理者として管理する)で働いています。なぜそれが作成アクションで動作していないのか分かりません。削除したくない:管理者がユーザーを追加できるようにするために登録可能。 – Scott

+0

こんにちはScott、新しい 'create'アクションを定義する必要はありません。あなたがdeviseのソースコードを見れば、 'app/controllers/devise/registrations_controller.rb'にあるdeviseはあなたのためにすべてのことをしています、それらのアクションの他に' authenticate_scope! 'は' authenticate_admin! 'あなたの場合は、追加され、** edit edit update update **のためにのみ動作します**これら3つのアクション。本当に 'authenticate_admin!'フィルタを追加してアクションを作成したいのであれば、 'Devise :: RegistrationsController'から継承し、' prepend_before_filter:authenticate_scope !::except => [:cancel] 'を追加することができます。 – Tomato

+1

私はこれがdeviseを使うだけでは複雑すぎると判断したので、私はCanCanを追加しました。助けてくれてありがとう。 – Scott

2

私は似たようなものを探していました。新規登録を完全に無効にする。私はどこかにメーリングリスト上でこれを掘っ、それは私の問題を解決しながら、それはあなたのためのまともな出発点であるかもしれない:

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

たぶん似たようなもののCURRENT_USERが管理者であるかどうかを確認するためのチェックを追加し、その後ベースをリダイレクトその上に...

1

私はしばらくこれについて熟考し、最後にこれを思いついた。

が工夫によってこのことができます

class UsersController < Devise::RegistrationsController 

    before_filter :authenticate_admin! 

    def new 
    if admin_signed_in? 
     super 
    else 
     redirect_to admin_session_path 
    end 
    end 

希望を作成したすべてのモデルのためのヘルパー関数があります。それは魅力的です:)

関連する問題