Zabezpečení
V konfiguračním souboru "config/security" je potřeba nastavit uživatelské role a jednotlivé uživatele.
{
"role": {
"ROLE_ADMIN": ["ROLE_USER"],
"ROLE_USER": true
},
"provider": {
"Gephart\\Security\\Provider\\StaticProvider": {
"entity": "Gephart\\Security\\Entity\\User",
"algorithm": "bcrypt",
"cost": "10",
"salt": "secretsalt"
}
},
"users": {
"admin": {
"password": "$2y$10$j6lJ7QaHidjNdHUI0bBNZOkb0wrr2o4r.qBlbqtChZbLPCWgfxKdC",
"roles": ["ROLE_ADMIN"]
}
}
}
Následně jen stačí pomocí anotace nastavit potřebné oprávnění, které uživatel potřebuje.
<?php
class AdminController {
/**
* @Security ROLE_ADMIN
*/
public function index(){
// ...
}
}
Přihlášení
Přihlášení lze provést jednoduše pomocí formuláře a následného odchycení v kontroleru:
<?php
namespace Admin\Controller;
use Gephart\Security\Authenticator\Authenticator;
use Psr\Http\Message\ServerRequestInterface;
final class DefaultController
{
/**
* @var ServerRequestInterface
*/
private $request;
/**
* @var Authenticator
*/
private $authenticator;
public function __construct(
ServerRequestInterface $request,
Authenticator $authenticator
)
{
$this->request = $request;
$this->authenticator = $authenticator;
}
public function index()
{
$postData = $this->request->getParsedBody();
if (!empty($postData["email"]) && !empty($postData["password"])) {
$email = $postData["email"];
$password = $postData["password"];
if ($this->authenticator->authorise($email, $password)) {
// ... akce provedené po přihlášení, většinou přesměrování
}
}
// ...
}
}
V případě neúspěšného přihlášení je vyvolána výjimka v metodě Authentificator::authorise, v přihlášení je nutné tedy její odchycení.
try {
if ($this->authenticator->authorise($email, $password)) {
// ... akce provedené po přihlášení, většinou přesměrování
}
} catch (\Exception $e) {
// ... akce provedé při neúspěchu
}
Příklad odhlašovacího kontroleru:
<?php
namespace App\Controller;
use Gephart\Routing\Router;
use Gephart\Security\Authenticator\Authenticator;
final class LogoutController
{
/**
* @var Authenticator
*/
private $authenticator;
/**
* @var Router
*/
private $router;
public function __construct(
Authenticator $authenticator,
Router $router
)
{
$this->authenticator = $authenticator;
$this->router = $router;
}
/**
* @Route {
* "rule": "/logout",
* "name": "logout"
* }
*/
public function index() {
$this->authenticator->unauthorise();
$this->router->redirectTo("login");
}
}