123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <?php
- namespace Drupal\Core\Authentication;
- /**
- * A collector class for authentication providers.
- */
- class AuthenticationCollector implements AuthenticationCollectorInterface {
- /**
- * Array of all registered authentication providers, keyed by ID.
- *
- * @var \Drupal\Core\Authentication\AuthenticationProviderInterface[]
- */
- protected $providers;
- /**
- * Array of all providers and their priority.
- *
- * @var array
- */
- protected $providerOrders = [];
- /**
- * Sorted list of registered providers.
- *
- * @var \Drupal\Core\Authentication\AuthenticationProviderInterface[]
- */
- protected $sortedProviders;
- /**
- * List of providers which are allowed on routes with no _auth option.
- *
- * @var string[]
- */
- protected $globalProviders;
- /**
- * {@inheritdoc}
- */
- public function addProvider(AuthenticationProviderInterface $provider, $provider_id, $priority = 0, $global = FALSE) {
- $this->providers[$provider_id] = $provider;
- $this->providerOrders[$priority][$provider_id] = $provider;
- // Force the providers to be re-sorted.
- $this->sortedProviders = NULL;
- if ($global) {
- $this->globalProviders[$provider_id] = TRUE;
- }
- }
- /**
- * {@inheritdoc}
- */
- public function isGlobal($provider_id) {
- return isset($this->globalProviders[$provider_id]);
- }
- /**
- * {@inheritdoc}
- */
- public function getProvider($provider_id) {
- return isset($this->providers[$provider_id]) ? $this->providers[$provider_id] : NULL;
- }
- /**
- * {@inheritdoc}
- */
- public function getSortedProviders() {
- if (!isset($this->sortedProviders)) {
- // Sort the providers according to priority.
- krsort($this->providerOrders);
- // Merge nested providers from $this->providers into $this->sortedProviders.
- $this->sortedProviders = [];
- foreach ($this->providerOrders as $providers) {
- $this->sortedProviders = array_merge($this->sortedProviders, $providers);
- }
- }
- return $this->sortedProviders;
- }
- }
|