【Rails】管理者ユーザーの作成
簡単な管理者ユーザー機能を作ったメモ。
まずは既存のusersテーブルにカラムを追加。
rails g migration AddAdminToUsers
migrationファイルを編集する。
class AddAdminToUsers < ActiveRecord::Migration[5.2] def change add_column :users, :admin, :boolean, default: false end end
adminカラムはbooleanという真偽値を持つ型に設定する。
デフォルトでfalseにしておく。
次に管理者権限を持つユーザーを作成してみる。
rails c
User.create!(username: "AdminUser", email: "admin@example.com", password: "admin123", password_confirmation: "admin123", admin: true)
などとして作成。
これで管理者ユーザーの作成が出来たので、投稿削除権限を与えてみる。
reviews/show.html.erb
<% if @current_user.id == @user.id || @current_user.admin? %> <%= link_to '削除する', @review, method: :delete, data: { confirm: '本当に削除してよろしいですか?' } %> <% end %>
ログインユーザーと投稿したレビューのユーザーが一致していた場合のみ、削除リンクを表示していたが
これをorを用いて管理者権限の有無でも判定できるようにしただけ。
controllers/reviews_controller.rb
private def correct_user if current_user.admin = false @review = current_user.reviews.find(params[:id]) if current_user.id != @review.user_id flash[:warning] = "権限がありません" redirect_to root_path end end end
削除しようとしているものが本当にログインユーザーが書いたものなのか判別しているものを
管理者権限がないときに限った条件として囲んでみた。
簡単な管理者機能なのでこれで終わり。