Security

Token

Authenticated
Property Value
Roles
[
  "ROLE_TENANT_USER"
  "ROLE_API_USER"
  "TENANT_USER"
]
Inherited Roles none
Token
Symfony\Component\Security\Http\Authenticator\Token\PostAuthenticationToken {#707
  -user: Proxies\__CG__\App\Entity\Main\TenantUser {#537 …}
  -roleNames: [
    "ROLE_TENANT_USER"
    "ROLE_API_USER"
    "TENANT_USER"
  ]
  -attributes: []
  -firewallName: "main"
}

Firewall

main Name
Security enabled
Stateless

Configuration

Key Value
provider security.user.provider.concrete.in_memory
context (none)
entry_point (none)
user_checker security.user_checker
access_denied_handler (none)
access_denied_url (none)
authenticators
[
  "App\Security\ApiKeyAuthenticator"
]

Listeners

Listener Duration Response
Symfony\Component\Security\Http\Firewall\ChannelListener {#600
  -map: Symfony\Component\Security\Http\AccessMap {#599 …}
  -logger: Monolog\Logger {#615 …}
  -httpPort: 80
  -httpsPort: 443
}
0.00 ms (none)
Symfony\Component\Security\Http\Firewall\AuthenticatorManagerListener {#661
  -authenticatorManager: Symfony\Component\Security\Http\Authentication\AuthenticatorManager {#658 …}
}
11.19 ms (none)
Symfony\Component\Security\Http\Firewall\AccessListener {#763
  -tokenStorage: Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage {#316 …}
  -accessDecisionManager: Symfony\Component\Security\Core\Authorization\TraceableAccessDecisionManager {#638 …}
  -map: Symfony\Component\Security\Http\AccessMap {#599 …}
}
0.95 ms (none)

Authenticators

Authenticator Supports Authenticated Duration Passport Badges
"App\Security\ApiKeyAuthenticator"
1.05 ms
Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport {#672
  #user: Proxies\__CG__\App\Entity\Main\TenantUser {#537 …}
  -badges: [
    "Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge" => Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge {#663
      -userIdentifier: "3c758468f89116f0416af992b27fdc83"
      -userLoader: Closure($apiKey) {#673 …}
      -user: Proxies\__CG__\App\Entity\Main\TenantUser {#537 …}
      -attributes: null
    }
  ]
  -attributes: []
}
UserBadge

Access Decision

affirmative Strategy
# Voter class
1
"Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter"
2
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
3
"Symfony\Component\Security\Core\Authorization\Voter\RoleVoter"
4
"Symfony\Component\Security\Core\Authorization\Voter\ExpressionVoter"

Access decision log

# Result Attributes Object
1 GRANTED ROLE_API_USER
Symfony\Component\HttpFoundation\Request {#2
  +attributes: Symfony\Component\HttpFoundation\ParameterBag {#17 …}
  +request: Symfony\Component\HttpFoundation\InputBag {#11 …}
  +query: Symfony\Component\HttpFoundation\InputBag {#14 …}
  +server: Symfony\Component\HttpFoundation\ServerBag {#20 …}
  +files: Symfony\Component\HttpFoundation\FileBag {#19 …}
  +cookies: Symfony\Component\HttpFoundation\InputBag {#18 …}
  +headers: Symfony\Component\HttpFoundation\HeaderBag {#21 …}
  #content: ""
  #languages: null
  #charsets: null
  #encodings: null
  #acceptableContentTypes: null
  #pathInfo: "/api/recipients/changes"
  #requestUri: "/api/recipients/changes?since=2026-01-16T19:07:11%2B00:00&limit=1000"
  #baseUrl: ""
  #basePath: null
  #method: "GET"
  #format: "json"
  #session: Closure() {#285 …}
  #locale: null
  #defaultLocale: "en"
  -preferredFormat: null
  -isHostValid: true
  -isForwardedValid: true
  -isSafeContentPreferred: ? bool
  -trustedValuesCache: []
  -isIisRewrite: false
  basePath: ""
}
"Symfony\Component\Security\Core\Authorization\Voter\RoleVoter"
ACCESS GRANTED
Show voter details