Подтвердить что ты не робот

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

Я пытаюсь разрешить администратору изменять другие пользователи в 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

Любые идеи? Спасибо!

4b9b3361

Ответ 1

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

Вам нужно создать UserController и самостоятельно создать свои формы и контроллер, но тогда вам также необходимо изолировать созданный 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/..., чтобы вы могли управлять пользователями как администратором.

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

Ответ 2

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

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

Ответ 3

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

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

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