管理者権限の機能を追加したい!
usersテーブルにadmin(=管理人)カラムを追加することで管理者権限の機能を追加してみようと思います。参考サイトはこちらから。
機能追加にあたり、前提として以下のものを作成しております。
・usersテーブルの作成
usersテーブルにadminカラムを追加(データ型はboolean)
$rails g(=generate) migration add_admin_to_users admin:boolean
すると[db/migrate(作成日)_add_admin_to_users.rb]にこのようなファイルが。
class AddAdminToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :admin, :boolean
end
end
このままでも良いのだが、自分で以下の部分を追記します。
class AddAdminToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :admin, :boolean, default: false
end
end
default: falseは「default(=初期値)では管理者になれない」ということを明示しています。本来記述不要だが、書いた方がわかりやすいという理由で書くそうです。
マイグレーションの実行
$rails db:migrate
管理者データを作成[db/seeds.rb(サンプルデータ生成タスク)]で管理者を1人追加
※赤字部分は自分で決める
User.create!(name: "admin",
email: "admin@admintest.com",
password: "admintest",
password_confirmation: "admintest",
admin: true)
ラストのadmin: trueが管理者であることを明示しています。
そして再度マイグレーションの実行
$rails db:migrate
これで管理者用ユーザができた。
使用例
管理者としてログインしたときにしか表示されない部分を作ってみました。
テーブルのカラムタイトルの部分ですが、
<% if current_user.admin? %>
<th class="text-center">ユーザ削除</th>
<% end %>
もしログインユーザーがadmin=trueならユーザ削除のカラムも表示
となっています。
これはできると作成物の幅が広がります。