Railsで管理者権限(admin)を設定するカンタンな方法は?

スポンサーリンク

 

こんにちは、Railsエンジニアにょけん(@nyoken_box)です。

Railsでアプリを作っている時、アプリを運営する側(管理者)にしか使えない機能を実装したい場面ってありませんか?

 

例えば、「不正ユーザーのアカウントを削除する」とか。

悪影響のあるユーザーは削除したいけど、誰でもユーザーの削除ができてしまっては困ります。

こういうときは、全ユーザーに対して管理者権限の有無を設定して、管理者権限があるユーザーしか削除を実行できないようにするのが一般的ですね。

というわけで、その方法を見ていきます。

 

スポンサーリンク

データベースに、boolean型のカラム「admin」を追加する

まずは、ユーザーに対して管理者権限の有無を設定するために、ユーザー情報のデータベースにadminというカラムを追加します。

adminboolean型で設定して、管理者権限がある場合はtrue、ない場合はfalseを返す想定ですね。

 

①boolean型のカラム「admin」をデータベースに追加

$ rails generate migration add_admin_to_users admin:boolean

 

次にdb:migrateといきたいところですが、その前にマイグレーションファイルに少しだけ追記します。

①で作成したマイグレーションファイル(db/migrate/[timestamp]_add_admin_to_users.rb)に、以下ピンク色の部分を書き足しましょう。

 

②マイグレーションファイルに「admin」のデフォルト値を追記

class AddAdminToUsers < ActiveRecord::Migration
  def change
    add_column :users, :admin, :boolean, default: false
  end
end

default: falseという引数を渡すことで、デフォルトでは管理者権限がない(false)で指定できます。

 

③マイグレーション実行

$ bundle exec rake db:migrate

 

スポンサーリンク

管理者権限を付けたいユーザーの「admin」をtrueにする

デフォルトでfalseを渡しているので、今は全てのユーザーが「admin=false」となっています。

管理者権限を与えたいユーザーに対し、adminの値をtrueに変更していきましょう。

データベースの更新はコンソールで行います。

 

①コンソールを起動

$ rails console

 

管理者権限を付けたいユーザーのIDを指定して、findメソッドで情報を取ってきて変更します。

ここでは、「ID=1」のユーザーに管理者権限を設定しますね。

 

②管理者権限を与える

>> user = User.find(1)
>> user.admin = true
>> user.save

 

これで、1番目のユーザーに管理者権限を与えられました。

あとは、「adminの値がtrueである場合のみ、画面に実行ボタンを表示する」みたいなことをviewファイルに書けばOKです。

せっかくなので、その辺のサンプルも書いときましょう。

 

管理者権限「admin」がtrueの場合のみ、削除リンクを与える

該当するviewファイルに、if文を用いて処理を書きましょう。

  <% if current_user.admin? && !(current_user == user) %>
    | <%= link_to "delete", user, method: :delete,
                                  data: { confirm: "You sure?" } %>
  <% end %

実際の画面で見ると、こんな感じ。(一番下の”test”というユーザーに管理者権限を与えてサインインしています)

 

if文内の「current_user.admin?」でadminがtrueの場合を指定したため、各ユーザーに対して「delete」というリンクがついています。

また、“test”自身には「delete」のリンクがないことにも注目してください。

adminがtrueの場合を指定するだけでは、”test”にも「delete」リンクが実装されてしまいます。

これを避けるために、!(current_user == user)」=userが現在のユーザーではない場合という条件を指定していたんですね。

 

Railsで管理者権限(admin)を設定する方法まとめ

Railsで、一定のユーザーだけが実行できるアクション等を作成したい場合は、管理者権限(admin)を利用しましょう。

手順は以下の通りでした。

まとめ
  1. データベースにboolean型でカラム「admin」を追加
  2. 「admin」のデフォルトをfalseで指定
  3. 管理者権限を与えたいユーザーの「admin」をtrueに変更
  4. viewファイルで、「admin」がtrueの場合のみアクションを表示させる

 

Twitterフォローしてね!!!

有益な無益をつぶやくよ↓↓↓

にょけん

スポンサーリンク