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
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)