Skip to main content

Introducció

CodeIgniter Shield, aquesta és la llibreria d'autenticació i autorització oficial per a CI4. Ja no cal "reinventar la roda" creant sistemes de login manuals; Shield és robust, segur (segueix les recomanacions del NIST) i molt flexible. Shield gestiona el registre, el login, la recuperació de contrasenyes, l'autenticació de dos factors (2FA) i el control de rols (RBAC).

1. Instal·lació i Configuració Inicial

Shield s'instal·la via Composer. Un cop descarregat, cal executar el seu assistent de configuració que crearà les taules necessàries a la teva base de dades (usuaris, identitats, tokens, etc.).

Bash
# 1. Instal·lar via Composer
composer require codeigniter4/shield

# 2. Executar l'instal·lador (crearà taules i fitxers de configuració)
php spark shield:setup

2. Control d'accés (Filtres)

Shield ja porta els filtres registrats a app/Config/Filters.php. Només cal que decideixis quines rutes vols protegir.

  • session: Per a aplicacions web tradicionals.

  • tokens: Per a APIs (Bearer Tokens).

Exemple de protecció a app/Config/Routes.php:

PHP
// Totes les rutes del grup d'administració requereixen login
$routes->group('admin', ['filter' => 'session'], function ($routes) {
    $routes->get('dashboard', 'AdminController::index');
    $routes->get('settings', 'AdminController::settings');
});

3. Gestió de Rols i Permisos (RBAC)

Shield permet definir Grups (com admin, user, editor) i Permisos (com users.create, posts.delete) al fitxer app/Config/AuthGroups.php.

Com comprovar-ho al controlador:

PHP
public function eliminarUsuari($id)
{
    // Comprovar si l'usuari té permís específic
    if (! auth()->user()->can('users.delete')) {
        return redirect()->back()->with('error', 'No tens permís!');
    }

    // O comprovar si pertany a un grup
    if (! auth()->user()->inGroup('admin')) {
        return redirect()->back()->with('error', 'Només els administradors poden fer això');
    }
}

4. Funcions útils al Codi (Helpers)

Shield injecta automàticament funcions globals que pots usar en Controladors i Vistes:

  • auth()->user(): Obté l'objecte de l'usuari actual.

  • auth()->id(): Obté l'ID de l'usuari loguejat.

  • auth()->loggedIn(): Retorna true/false si l'usuari ha iniciat sessió.

  • auth()->logout(): Tanca la sessió.

Exemple a la Vista (Navbar):

PHP
<?php if (auth()->loggedIn()): ?>
    <span>Hola, <?= auth()->user()->username ?></span>
    <a href="<?= base_url('logout') ?>">Sortir</a>
<?php else: ?>
    <a href="<?= base_url('login') ?>">Iniciar Sessió</a>
<?php endif; ?>

5. Personalització de les vistes

Si vols canviar el disseny del formulari de login de Shield, no has de tocar la carpeta vendor. Has de publicar les vistes al teu directori app/:

Bash
php spark auth:publish

Això copiarà els fitxers a app/Views/Shield/

Observacions

Shield no només protegeix contra atacs de força bruta (usant el Throttler internament), sinó que també gestiona la validació de contrasenyes segures i el bloqueig temporal de comptes. És la millor manera de garantir que la teva aplicació CI4 segueix els estàndards de seguretat de 2026.