/** * @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 createPermissionRepository($context) { $enabled = $this->configuration($context)->isPermissionsEnabled(); if (!$enabled) { return new InsecurePermissionRepository(); } if ($permissionRepository = $this->configuration($context)->getPermissionRepository()) { return $this->container->make($permissionRepository); } return $this->defaults->createPermissionRepository($context); }
/** * {@inheritdoc} */ public function createPermissionRepository($context) { return $this->bindAndReturn(PermissionRepository::class, $this->repositories->createPermissionRepository($context)); }