Разработать: разрешить администраторам редактировать других пользователей - 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
Любые идеи? Спасибо!
Ответы
Ответ 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 не является администратором.