Я использую 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
...