У меня есть приложение, которое использует CacCan и Devise. Я имею Разрабатывают обрабатывать Пользователь уничтожить ДействиеDevise and CanCan не может: уничтожить пользователя
Маршрут
DELETE /users(.:format) devise/registrations#destroy
Мой контроллер
class UsersController < ApplicationController
skip_before_filter :authenticate_user!, :only => :portfolio
def index
redirect_to dashboard_user_path(current_user)
end
def dashboard
...
end
def portfolio
end
end
Мой ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.role?('Administrator')
can :access, :rails_admin
can :dashboard
can :manage, :all
else
cannot :destroy, User
can :read, :all
...
end
end
end
Этот код выше не работает. Пользователь, который не является администратором, по-прежнему имеет возможность удалять пользователя. Я предполагаю, что причина в том, что у меня нет метода UserController # destroy.
Итак, мой вопрос: как мне заставить CanCan запретить пользователю, который не является администратором, удалять пользователя?
Любая помощь была бы принята с благодарностью.
Благодаря
Спасибо за ответ. Я попробовал авторизацию! с load_and_authorize_resource, и удаление все еще происходит для пользователя, который не является администратором. Мне было интересно, есть ли способ реализовать авторизацию для действия, которое вызывается из Devise. Причина, по которой я говорю это; Я мог бы создать метод в моем контроллере и маршрут для этого метода. Затем внесите изменения, которые вы предложили. Но это не помешало бы кому-то запустить devise/registrations # destroy, который удалит пользователя. – user2517182
Я думаю (но я не уверен), что уничтожить маршрут переходит к другому контроллеру/действию. Я нашел несколько примеров: [this] (http://stackoverflow.com/questions/16289299/rails-how-to-destroy-users-created-under-devise) утверждает, что разработка не обеспечивает действие 'destroy', [devise wiki] (https://github.com/plataformatec/devise/wiki/How-To:-Disable-user-from-destroying-his-account) - еще один пример. Я предлагаю проверить, работает ли ваше действие, когда пользователь уничтожает учетную запись, - тогда отладочная способность еще пытается реализовать пример разработки и применить к нему 'authorize'. – gotva
Первая строка в Devise :: RegistrationsController # destroy - ресурс.destroy. Я считаю, что это использование моего метода уничтожения пользователя #. Не уверен, могу ли я использовать первую ссылку, но вторая ссылка на wiki-разработчик кажется многообещающей. Я посмотрю на это и дам вам знать, работает ли это. – user2517182