deviseで一般ユーザーと管理者とで分ける
管理者(admin)と利用者でユーザーを分ける
自分で1からWebアプリケーションを作成しています。
今回、私が作成したいのはパンの取り置き(予約)サイトです。
トップページにはご予約方法や商品一覧を表示させたいと考えてます。
管理者だけが商品の追加、編集、削除を行いたいと考えてます。
そこで他の一般のユーザーの方にはそうならないように条件分岐する予定です。
が、機能の導入の前にDB設計で躓きました。
ただでさえ、最終理想のWebアプリケーションはER図でのテーブルが非常に多く、乱雑な状態でした。
元々あるusersテーブルにadmin機能だけ追加出来ないか?
と考え、調べに調べました…
deviseでユーザー管理機能を導入し、管理者を設定するにはどうすれば良いのか。
boolean型(カラム)をusersテーブルに追加する
# app/db/migrate 内のuserテーブルの記述 create_table :users do |t| ## Database authenticatable t.string :nickname, null: false t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" t.string :family_name, null: false t.string :first_name, null: false t.string :phonenumber, null: false t.boolean :admin, default: false
boolean、初めて出てきた用語です。
直訳すると「真、または、偽」
default: falseはなぜfalseなのかは分かりませんが、
偽で初期設定をしている。と今の私は無理矢理納得しました。
管理者を登録する
# app/db/seeds.rb User.create!( nickname: "*************", email: "*************", password: "*************", password_confirmation: "*************", family_name: "*************", first_name: "*************", phonenumber: "*************", admin: true )
seeds.rbファイルを初めて触りました。
色々調べたけど、テスト環境で使うファイルと端的に認識しました。
そしてここでのadminはtrueとなっています。
さて、ここで記述した情報をusersテーブルに保存したいと思います。
rails db:seed
無事にテーブルに保存されており、ローカル環境でバッチリログインできました。
しかし、このままだと本番環境では機能しないみたいです。
下記を参考にさせていただき、本番は鍵にして動作確認します。
上記のコマンドに出てたコマンドで反映されませんでした。
結論として
heroku run rake db:seed #heroku上で行うコマンドでないと実行できませんでした。