Разработать: разрешить администраторам редактировать других пользователей - Rails - PullRequest
17 голосов
/ 07 апреля 2011

Я пытаюсь разрешить администратору редактировать других пользователей в Devise, но когда я пытаюсь получить доступ к странице редактирования для другого пользователя (например, / users / 1 / edit), я получаю следующее сообщение:

Unknown action

Could not find devise mapping for path "/users/1/edit"

Единственный доступный путь - это / users / edit, который показывает страницу редактирования для текущего пользователя.

В моем файле маршрутов у меня есть:

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

Есть идеи? Спасибо!

Ответы [ 3 ]

19 голосов
/ 20 июля 2012

Я тоже должен был это сделать, и в настоящее время он не встроен в устройство. Поскольку в ответе большинства проголосовавших есть неработающая ссылка, я решил опубликовать свое решение здесь.

Вам нужно создать UsersController и создать свои формы и контроллер самостоятельно, но затем вам также нужно изолировать UsersController, который разрабатывает настройки. Для этого в вашем routes.rb файле измените ваш devise_for :users вызов на

devise_for :users, :path_prefix => 'd' # routes for devise modules on User

resources :users # custom admin-type CRUD for users

Это изменит все ваши маршруты с обработкой по умолчанию на / d / users / ... и позволит вам иметь путь / users / ..., чтобы вы могли управлять пользователями как администратором.

Devise также обращается к этому в своей вики .

7 голосов
/ 07 апреля 2011

Devise отлично подходит для аутентификации пользователя , но не поставляется со встроенной поддержкой управления пользователями.Так что вам придется построить это самостоятельно.

Вот пример того, как это сделать.Примеру несколько месяцев, но он должен указать вам правильное направление.

1 голос
/ 07 апреля 2011

Я сделал то, что вы пытаетесь сделать, и ваши маршруты выглядят правильно.

Вам также необходимо создать UsersController, который обрабатывает все действия CRUD, которые вы хотите выполнить над пользователями.Это отдельно от Devise.

Когда ваш UsersController находится там, вы можете разрешить администраторам доступ к определенным действиям, перенаправляя (возможно, в фильтре before), если current_user не является администратором.

...