サンプルデータ生成タスクに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
任意のユーザーが自分自身にアプリケーションの管理者権限を与えることを防止できます。