/** * @param string $context * @param SecurityContextConfiguration $configuration * @return Security */ public function create($context, SecurityContextConfiguration $configuration) { $persistences = $this->repositories->createPersistenceRepository($context); $roles = $this->repositories->createRoleRepository($context); $users = $this->repositories->createUserRepository($context, $persistences, $roles); $sentinel = new Sentinel($persistences, $users, $roles, $this->repositories->createActivationRepository($context), $this->container->make(Dispatcher::class)); foreach ($configuration->listCheckpoints() as $key => $checkpoint) { $sentinel->addCheckpoint($key, $this->makeCheckpoint($checkpoint, $configuration)); } $sentinel->setReminderRepository($this->repositories->createReminderRepository($context, $users)); $sentinel->setRequestCredentials(function () { $request = $this->container->make('request'); $login = $request->getUser(); $password = $request->getPassword(); if ($login === null && $password === null) { return; } return compact('login', 'password'); }); $sentinel->creatingBasicResponse(function () { $headers = ['WWW-Authenticate' => 'Basic']; return new Response('Invalid credentials.', 401, $headers); }); $security = new Security($sentinel, $this->repositories->createPermissionRepository($context)); $this->bindUrlGenerator($security); $security->setLoginRoute($configuration->getLoginRoute()); return $security; }
/** * {@inheritdoc} */ public function createPersistenceRepository($context) { if ($this->configuration($context)->getPersistenceRepository()) { $repository = $this->container->make($this->configuration($context)->getPersistenceRepository()); } else { $repository = $this->defaults->createPersistenceRepository($context); } $repository->setPersistenceMode($this->configuration($context)->isSinglePersistence() ? 'single' : 'multi'); return $repository; }
/** * {@inheritdoc} */ public function createPersistenceRepository($context) { return $this->bindAndReturn(PersistenceRepository::class, $this->repositories->createPersistenceRepository($context)); }