Module: TenantLevelSecurity
- Defined in:
- lib/activerecord-tenant-level-security/sidekiq.rb,
lib/activerecord-tenant-level-security/version.rb,
lib/activerecord-tenant-level-security/schema_dumper.rb,
lib/activerecord-tenant-level-security/command_recorder.rb,
lib/activerecord-tenant-level-security/schema_statements.rb,
lib/activerecord-tenant-level-security/reconnectable_adapter.rb,
lib/activerecord-tenant-level-security/tenant_level_security.rb
Defined Under Namespace
Modules: CommandRecorder, ReconnectableAdapter, SchemaDumper, SchemaStatements, Sidekiq
Classes: TenantContext
Constant Summary
collapse
- VERSION =
'0.8.0'
- DEFAULT_PARTITION_KEY =
'tenant_id'.freeze
Class Method Summary
collapse
Class Method Details
.current_session_tenant_id ⇒ Object
55
56
57
58
59
60
|
# File 'lib/activerecord-tenant-level-security/tenant_level_security.rb', line 55
def current_session_tenant_id
ActiveRecord::Base.connection.execute('SHOW tenant_level_security.tenant_id').getvalue(0, 0)
rescue ActiveRecord::StatementInvalid => e
return nil if e.cause.kind_of? PG::UndefinedObject
raise
end
|
.current_tenant_id(&block) ⇒ Object
The current_tenant_id sets the default tenant from the outside.
Be sure to register in advance as TenantLevelSecurity.current_tenant_id { id } with initializers.
This value is mainly used as the current value when reusing a connection.
Therefore, keep in mind that you need to manage it differently from the session value in the database.
22
23
24
25
26
27
28
|
# File 'lib/activerecord-tenant-level-security/tenant_level_security.rb', line 22
def current_tenant_id(&block)
if block_given?
@@block = block
else
@@block.call
end
end
|
.switch!(tenant_id) ⇒ Object
34
35
36
|
# File 'lib/activerecord-tenant-level-security/tenant_level_security.rb', line 34
def switch!(tenant_id)
TenantContext.tenant_id = tenant_id
end
|
.switch_current_tenant_context!(conn = ActiveRecord::Base.connection) ⇒ Object
38
39
40
41
42
43
|
# File 'lib/activerecord-tenant-level-security/tenant_level_security.rb', line 38
def switch_current_tenant_context!(conn = ActiveRecord::Base.connection)
TenantLevelSecurity.switch_with_connection!(
conn,
TenantLevelSecurity::TenantContext.tenant_id || TenantLevelSecurity.current_tenant_id
)
end
|
.switch_with_connection!(conn, tenant_id) ⇒ Object
45
46
47
48
49
50
51
52
53
|
# File 'lib/activerecord-tenant-level-security/tenant_level_security.rb', line 45
def switch_with_connection!(conn, tenant_id)
conn.clear_query_cache
if tenant_id.present?
conn.execute("SET tenant_level_security.tenant_id = '#{tenant_id}'")
else
conn.execute('SET tenant_level_security.tenant_id TO DEFAULT')
end
end
|
.with(tenant_id, &block) ⇒ Object
30
31
32
|
# File 'lib/activerecord-tenant-level-security/tenant_level_security.rb', line 30
def with(tenant_id, &block)
TenantContext.with(tenant_id: tenant_id, &block)
end
|