はじめに
administrateの導入は簡単にできるけど、管理権限の方法があまり記事で見つからなかったので書いてみようと思いました。
先に言っておきますがなんせよわよわ未経験エンジニアなので、方法が至らないところもあると思います。
その際は、ご教授いただけると嬉しいです。
公式ドキュメントこちらです。
Administrateの導入
Gemfileに以下を記載し、bundle install ↓
gem "administrate"
dockerの場合は、docker-compose exec アプリ名 bundle install
を叩いてください。
そして、installerを実行してください。 ↓
# デフォルト設定での install (デフォルトのnamespace: admin)
$ rails generate administrate:install
# 任意のnamespaceを使いたいとき (namespace: manager)
$ rails generate administrate:install --namespace=manager
これで、http://localhost:3000/admin
などにアクセスすると、自動で管理画面が作成されていると思います。
もし、エラーが出た場合はサーバーの再起動をしてみてください。
Dockerの場合は、downしてbuildして立ち上げるとできました。
管理権限の付与
まずはuser.rbにenumを定義
#user.rb
enum role: { general: 0, admin: 1 }
userカラムにroleを追加するため、マイグレーションファイルを作成する。Dockerのため以下のコードをターミナルで叩く。
docke-compose exec アプリ名 add_role_to_users
xxxxxxxxxx_add_role_to_users.rb
が作成されており、以下を追加。
class AddRoleToUsers < ActiveRecord::Migration[7.0]
def change
add_column :users, :role, :integer, default: 0, null: false
end
end
そして、docker-compose exec アプリ名 rails db:migrate
を叩く。
とりあえずコンソールでユーザーを作成。
[1] pry(main)> User.create!(name: "admin", email: "admin@example.com", password: "admin", salt: "admin", role: 1)
管理者しか管理画面にアクセスできないようにする
今のままだと、ベタ打ちでhttp://localhost:3000/admin
にアクセスすると、誰でもアクセスできてしまう。admin/application_controller.rb
が作成されているはずなので、処理を記載しておく。
module Admin
class ApplicationController < Administrate::ApplicationController
before_action :authenticate_admin
def authenticate_admin
if current_user && current_user.role === "admin"
admin_root_path
else
redirect_to root_path
end
end
end
end
↑ リファクタリングできる部分があれば教えていただきたいです。