0
2

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 3 years have passed since last update.

deviseを使用した一般ユーザーと管理者ユーザーの分離

Posted at

開発環境

フレームワーク:Ruby on Rails 6.0.0
データベース: MySQL2 Sequel Proを仕様

この技術が必要となった経緯

食べログのようなレストラン検索アプリケーションを開発中、レストラン情報を登録できる管理者ユーザーと、通常ユーザーを分離したかったため
流れをアウトプットしていきます。

adminカラムを追加

管理者ユーザーか否かを判断するためには、
「管理者ユーザーにしかない値を定義し、その値の有無によって条件分岐を行い、権限があるかないかを判断する」
という流れとなります。
そのため、まずはadminという名前のカラムを作成します。

ターミナルにて

# ターミナル
rails g migration AddAdminToUsers

↑カラム追加用のmigrationファイルが作成されました。

# migrationファイル
class AddAdminToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :admin, :boolean, default: false
  end
end

↑作成されたマイグレーションファイルにカラムを追加する記述をします。
deviseのusersテーブルに追加したいので:usersを指定
カラムの型は「管理者ユーザーか否か?」真偽値をとりたいのでboolean型を使用
デフォルト値は0にしたいので default:falseとします。

rails db:migrate

↑マイグレートします。するとusersテーブルにadminカラムが追加されます。

管理者ユーザーの登録

seedファイルに記述→rails db:seedでusersテーブルに反映させる

# seeds.rb

User.create!(name:  "管理者",
             email: "admin@sample.jp",
             password:  "11111111",
             password_confirmation: "11111111",
             admin: true)

↑管理者ユーザーの情報を記述します。
admin: trueとすることでadminカラムの真偽値が1となります。
カラム名はご自身が開発しているアプリケーションのusersテーブルの内容に合わせてください。

# ターミナル
rails db:seed

↑usersテーブルにseedファイルの内容を登録します。
データベースを確認し、記述した内容と一致していればOKです。

以上で管理者の登録は完了しました。

管理者用コントローラーの作成

次に、管理者用のアクションを定義するコントローラーを作成します。

# ターミナル
rails g controller admin::shops

↑コントローラーが作成できました。


class Admin::ShopsController < ApplicationController
  before_action :admin?

  #中略

  private
  def admin?
    redirect_to root_path unless current_user.admin?
  end
end

↑ コントローラーに使用するアクションを定義します。privateメソッドで現在のユーザーが管理者でなければ、root_pathにリダイレクトする記述をします。

ルーティングの設定

最後にルーティングの設定を行ます。

# routes.rb

resources :shops
  namespace :admin do
    resources :shops
  end

以上で一般ユーザーと管理者ユーザーのアクション分離ができました。

0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?