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.).
# 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:
// 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:
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(): Retornatrue/falsesi l'usuari ha iniciat sessió. -
auth()->logout(): Tanca la sessió.
Exemple a la Vista (Navbar):
<?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/:
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.