Проверьте это решение от Тони Амоял
Я проверил, и это работает как шарм ...
http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/
Он использует канкан, но крючки легко настраиваются под другие механизмы.
скопировано здесь для будущей ссылки, если его блог сломан:
... "вы хотите защитить регистрацию пользователей. Для этого необходимо использовать CanCan для проверки разрешений, но настроить контроллер Devise Registrations для ограничения доступа.
Один из способов сделать это - скопировать контроллеры devise в каталог контроллеров и начать настройку. Это может быть лучший путь, и это, безусловно, очевидный путь, но все, что я хочу сделать, ограничить регистрацию. Должен ли я действительно заново реализовать контроллер регистрации, чтобы сделать это? Пока не буду. Это может иметь смысл, когда есть больше настроек. Вместо этого я наследую от контроллера Devise Registrations. Вот шаги:
Шаг 1 - Создать контроллер
* * 1010
Шаг 2 - добавление пользовательских функций
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :check_permissions, :only => [:new, :create, :cancel]
skip_before_filter :require_no_authentication
def check_permissions
authorize! :create, resource
end
end
Метод проверки прав доступа действительно прост. Он вызывает метод CanCan, authorize !, и проверяет, может ли текущий пользователь создавать пользователей. Мы используем ресурс здесь, потому что devise использует ресурс для ссылки на модель, которая может быть аутентифицирована. Также обратите внимание, как я удалил фильтр require_no_authentication, фильтр Devise, который разрешает доступ к действиям без аутентификации. "