Module: Vert::Concerns::MultiTenant

Extended by:
ActiveSupport::Concern
Defined in:
lib/vert/concerns/multi_tenant.rb

Overview

MultiTenant


Adiciona escopo automático por ‘tenant_id` baseado em `Vert::Current.tenant_id`.

## Uso básico

class Order < ApplicationRecord
  include Vert::Concerns::MultiTenant
end

## System records (tenant_id NULL)

Alguns modelos têm registros “globais” que devem ser visíveis em todos os tenants — ex: ‘Role` system, `Plan`, `Permission` catálogo. Esses registros são identificados por `tenant_id IS NULL`.

Por default, o ‘default_scope` filtra `where(tenant_id = current)`, o que exclui esses registros silenciosamente quando há tenant ativo. Para incluí-los, use o opt-in:

class Role < ApplicationRecord
  include Vert::Concerns::MultiTenant
  multi_tenant_options include_system_records: true
end

Com essa opção, o default_scope passa a ser:

where("tenant_id = ? OR tenant_id IS NULL", Vert::Current.tenant_id)

Aplica-se também à validação: ‘tenant_id` deixa de ser obrigatório.

## Bypass manual

Para queries específicas que precisam ignorar o escopo:

Order.unscoped.where(id: external_id)
Order.unscoped_for_tenant(other_tenant_id).find(id)