Rails Devise, как сделать так, чтобы «подписывался» только для суперпользователя - PullRequest
3 голосов
/ 27 февраля 2012

Я использую приложение Devise для Rails 3.2.1.Я хочу заблокировать sign_up, так что только суперпользователь / администратор может добавлять новых пользователей.Как мне этого добиться?

(обновление) Я попробовал совет, предложенный в Разработать перед фильтром, который запрещает доступ к "new_user_registration_path", если пользователь не вошел в систему

, но он не работает, так какдобавленный контроллер, очевидно, не защищает паролем новый маршрут "/ users / registrations":

Создайте контроллер с наследованием класса Devise :: RegistrationsController.После вы можете добавить свой фильтр.Вам просто нужно определить этот контроллер как регистрационный контроллер

class RegistrationsController < Devise::RegistrationsController
  before_filter :authenticate_user!
end

В ваших маршрутах .rb

devise_for :users, :controllers => { :registrations => 'registrations'}

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

Я бы предложил создать CRUD, доступный только для суперпользователя, и он сможет создавать пользователей вместо того, чтобы ограничивать доступ к пути регистрации только для суперпользователя. Вы можете найти помощь для этого здесь: https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface.

Если вы хотите использовать регистрацию, я бы сделал почти то же самое, что вы указали в ответе, но фильтр before_filter должен выглядеть примерно так:

before_filter :authenticate_user!, :redirect_unless_admin

# (...)

private
def redirect_unless_admin
  unless current_user.admin        
    redirect_to root_path
  end
end
1 голос
/ 17 января 2014

Проверьте это решение от Тони Амоял Я проверил, и это работает как шарм ...
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, который разрешает доступ к действиям без аутентификации. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...