El filter Autentica
Filter (Autentica)
Implementem la lògica d'autenticació. Important: hem de registrar l'àlies després de crear la classe.
Fitxer: app/Filters/Autentica.php
<?php
namespace App\Filters;
use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
class Autentica implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
// 1. Validació bàsica: Està logat?
if (!session()->get('loggedIn')) {
return redirect()->to(base_url('userdemo/login'))->with('error', 'Si us plau, inicia sessió.');
}
// 2. Validació d'arguments (Noms específics)
// Si la ruta té arguments, ex: filter:autentica:admin,profe
if ($arguments !== null) {
$userName = session()->get('name');
// Si el nom de l'usuari no està a la llista d'arguments permesos
if (!in_array($userName, $arguments)) {
return redirect()->back()->with('error', 'Accés no permès per al teu usuari.');
}
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
// No cal fer res després
}
}
IMPORTANT! Cal registrar el filtre per poder aplicar-lo dins del routes
Registrar el filtre a app/Config/Filters.php.
public $aliases = [
'csrf' => \CodeIgniter\Filters\CSRF::class,
// ...
'autentica' => \App\Filters\Autentica::class, // Registre
];
En cas que una ruta requereixi que s'apliquin dos filtres, llavors caldrà crear un alias que s'associï als dos filtres, com l'exemple següent:
public $aliases = [
// ...
'apiPrep' => [
\App\Filters\Negotiate::class,
\App\Filters\ApiAuth::class,
],
];