Rails+Apartmentでのマルチテナント環境にて、ユーザ毎の切り替えを行う方法について
現在Ruby on RailsとApartmentを使用してマルチテナント環境を構築しています。Apartmentの公式ドキュメントにあるようなサブドメイン毎の切り替えではなく、ユーザ毎の切り替えを実現したいと考えています。
以下に記載するコードでユーザ毎の切り替えが一見できていますが、果たしてこの実装がパフォーマンスおよびセキュリティ的に問題ない方法であるかがわからずにおります。
なお、状況としては、以下のようになります。
・バックエンド:Ruby on Rails
・フロントエンド:Nuxt.js
・ユーザ認証にはKnockを使用しています。
application_controller.rb
class ApplicationController < ActionController::Base
include Knock::Authenticable
include ActionController::MimeResponds
skip_before_action :verify_authenticity_token
before_action :switch_tenant
def switch_tenant
if current_user != nil
Apartment::Tenant.switch!(current_user.tenantname)
end
end
end
User model's migration file
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :email
t.string :password_digest
t.string :tenantname
t.timestamps
end
add_index :users, :email, unique: true
end
end
抽象的な質問となりますが、ユーザ毎の切り替え方法、もしくはRuby on Rails + Nuxt.js + Apartment + Knock のような構成でのマルチテナント環境の構築について何か良い方法があれば何でもご意見頂きたいです。
元々、サブドメインでの切り替えで実装しようとしましたが、フロントエンドとバックエンドが別れていてかつKnockをユーザ認証に使用している場合の方法がわからず、ユーザ毎のテナント切り替えに行き着いた経緯があります。
よろしくお願いします。