Module: Legion::Data::Rls

Defined in:
lib/legion/data/rls.rb

Constant Summary collapse

RLS_TABLES =
%i[
  tasks digital_workers audit_log memory_traces extensions
  functions runners nodes settings value_metrics
].freeze

Class Method Summary collapse

Class Method Details

.assign_tenant(tenant_id) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/legion/data/rls.rb', line 21

def assign_tenant(tenant_id)
  return unless rls_enabled?

  Legion::Data.connection.run(
    Sequel.lit('SET app.current_tenant = ?', tenant_id.to_s)
  )
end

.current_tenantObject



29
30
31
32
33
34
35
# File 'lib/legion/data/rls.rb', line 29

def current_tenant
  return nil unless rls_enabled?

  Legion::Data.connection.fetch('SHOW app.current_tenant').first&.values&.first
rescue Sequel::DatabaseError
  nil
end

.reset_tenantObject



37
38
39
40
41
# File 'lib/legion/data/rls.rb', line 37

def reset_tenant
  return unless rls_enabled?

  Legion::Data.connection.run('RESET app.current_tenant')
end

.rls_enabled?Boolean

Returns:

  • (Boolean)


13
14
15
16
17
18
19
# File 'lib/legion/data/rls.rb', line 13

def rls_enabled?
  return false unless Legion::Settings[:data][:connected]

  Legion::Data.connection.adapter_scheme == :postgres
rescue StandardError
  false
end

.with_tenant(tenant_id) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/legion/data/rls.rb', line 43

def with_tenant(tenant_id)
  previous = current_tenant
  assign_tenant(tenant_id)
  yield
ensure
  previous ? assign_tenant(previous) : reset_tenant
end