Module: CommandTower::AdminScope::ManifestProjection

Defined in:
lib/command_tower/admin_scope/manifest_projection.rb

Constant Summary collapse

IMPERSONATION_DISABLED_REASON =
"Admin tools are unavailable while impersonating a user."

Class Method Summary collapse

Class Method Details

.call(definition:, principal:) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/command_tower/admin_scope/manifest_projection.rb', line 10

def call(definition:, principal:)
  scope_payload = scope_payload_for(definition)
  unscoped_unregistered = scope_payload.nil? && !admin_scope_registered?(definition.id)

  availability = availability_for(definition, principal:)
  scope_options = scope_options_for(definition, principal:)

  payload = {
    scope: scope_payload,
    availability:,
    scope_options:
  }.compact

  if CommandTower::Current.impersonation_active
    payload[:availability] = {
      enabled: false,
      reason: IMPERSONATION_DISABLED_REASON
    }
    return payload
  end

  return {} if unscoped_unregistered

  payload
end