cloud_download Stáhnout
Verze: 0.6

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");
    }
}