2012-04-04 4 views
3

Я пытаюсь ограничить регистрацию администратором Devise. Если возможно, я бы хотел избежать использования CanCan. Я создал отдельную конструкцию Devision Admin, как описано в опции № 1 здесь: https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role.Как ограничить регистрацию администратором с помощью Devise

Далее я установил интерфейс 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

Вы не можете использовать before_filter :authenticate_admin! в Контроллере пользователей, потому что администратор и пользователь - это две разные модели в вашем приложении.

Я не знаю, если я полностью понимаю, что вы имеете в виду, но вы можете это сделать, если вы не хотите принимать новые регистрации для пользователя (или администратор):

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

Надеется, что это помогает!

+0

При добавлении роли администратора вы должны использовать 'before_filter: authenticate_admin!'. В настоящее время это работает для меня в индексе Users и show action (для управления пользователями как admin). Я не уверен, почему он не работает над созданием действия. Я не хочу удалять: зарегистрироваться, потому что я хочу, чтобы админы могли добавлять пользователей. – Scott

+0

Привет, Скотт, вам не нужно определять новое действие 'create'. Если вы заглянете в исходный код разработки, вы найдете в 'app/controller/devise/registrations_controller.rb' devise сделало все для вас, помимо этих действий,' authenticate_scope! ', Который является абстрактным методом для' authenticate_admin! 'в вашем случае, добавляется и работает только для **' edit destroy update' ** этих трех действий. Если вы действительно хотите добавить фильтр '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 

Надеется, что это помогает. Он работает как шарм :)

Смежные вопросы