日別アーカイブ: 2021年12月20日

Docker+Rails環境下でのユーザー削除の実装(退会機能の実装)

サンプルデータ生成タスクにadminユーザーを1人追加します。

db/seeds.rb

User.create!([{ name: "suzutuki",
  email: "example@railstutorial.org",
  password: "suzu",
  password_confirmation: "suzu",
  admin: true },
  { name: "suzu",
  email: "suzu1@railstutorial.org",
  password: "suzu",
  password_confirmation: "suzu"},
  { name: "suzu",
  email: "suzu2@railstutorial.org",
  password: "suzu",
  password_confirmation: "suzu"},
  { name: "suzu",
  email: "suzue3@railstutorial.org",
  password: "suzu",
  password_confirmation: "suzu"}])

seedファイルを使う時にはデータベースをリセットします。

docker-compose run web bundle exec rails db:migrate:reset

データベース上にサンプルユーザーを生成します。

docker-compose run web bundle exec rails db:seed

users_contorollerに以下の記述を追加します。

before_action :admin_user, only: [:show]

 def destroy
  @user = User.find(params[:id])
  @user.destroy if correct_user || admin_user
 end
  
private
 def user_params
  params.require(:user).permit(:name, :email, :password,
                          :image, :password_confirmation)
  end

# 正しいユーザーかどうか確認する
  def correct_user
    @user = User.find(params[:id])
    redirect_to(root_url) unless current_user?(@user)
  end

# 管理者かどうか確認する
  def admin_user
    redirect_to(root_url) unless current_user.admin?
  end

任意のユーザーが自分自身にアプリケーションの管理者権限を与えることを防止できます。

続きを読む