【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

削除しようとしているものが本当にログインユーザーが書いたものなのか判別しているものを
管理者権限がないときに限った条件として囲んでみた。
簡単な管理者機能なのでこれで終わり。