0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Administrateでの管理権限

Posted at

はじめに

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

↑ リファクタリングできる部分があれば教えていただきたいです。

参考記事

公式ドキュメント
Rails管理画面gem の新星!administrate を使おう - その1 導入

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?