Rails 5 / Devise - удаление пользователей от имени администратора - PullRequest
0 голосов
/ 26 августа 2018

Я использую devise для управления аутентификацией.У меня есть модель User и модель Admin.Я хочу, чтобы пользователи и администраторы могли мягко удалять учетные записи пользователей.

Я реализовал мягкое удаление для пользователей, и все работает хорошо, однако добавление функциональности для администраторов приводит к 401 unauthorized и перенаправлению на страницу входа пользователя.Я не совсем уверен, как обойти это.

Пока у меня есть:

config / rout.rb

...
devise_for :users
devise_scope :user do
  resources :users, only: [:destroy], controller: 'members/registrations', as: :user_registration do
    get 'cancel'
  end
end
...

controllers / members / registrations_controller.rb

class Members::RegistrationsController < Devise::RegistrationsController

  def destroy
    @user = User.find(params[:id])
    not_authorized unless authorized?
    @user.soft_delete
    user_post_destroy if is_current_user?
  end

  private

  def authorized?
    if signed_in?
      is_current_user?
    else
      session[:session_id] == @user.author_session_token
    end
  end

  def not_authorized
    flash[:error] = t('errors.messages.not_authorized')
    flash.keep
    redirect_back(fallback_location: root_path)
  end

  def user_post_destroy
    Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
    set_flash_message :notice, :destroyed
    yield resource if block_given?
    respond_with_navigational(resource){ redirect_to after_sign_out_path_for(resource_name) }
  end

  def is_current_user?
    @user == current_user
  end

end

models / user.rb

...
def soft_delete
  update_attribute(:deleted_at, Time.current)
end

def active_for_authentication?
  super && !deleted_at
end

def inactive_message
  !deleted_at ? super : :deleted_account
end
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...