juanvladimir13 / phpauth
PHP authentication & authorization system with RBAC, CSRF, rate limiting, and PostgreSQL
v0.0.4
2026-07-19 15:36 UTC
Requires
- php: ^8.3
- ext-yaml: *
- juanvladimir13/postgres-database: ^0.1.7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.45
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.8
- vimeo/psalm: ^5.18
README
Un sistema completo de control de acceso seguro para PHP vanilla (sin frameworks) con PostgreSQL.
Funcionalidades
- Autenticación: Registro, Login, Logout y actualización de contraseñas de forma segura.
- Autorización (RBAC + Permisos): Middleware reusable para proteger rutas por rol o permisos granulares.
- Seguridad Integrada:
password_hashcon ARGON2ID.- Prevención de SQL Injection mediante
PDOPrepared Statements y desactivación de emulación de consultas. - Prevención de Session Fixation (
session_regenerate_id). - Mitigación de XSS y CSRF con sesiones
httponlyysamesite=Lax. - Protección activa contra CSRF mediante validación de tokens únicos con
hash_equals. - Prevención de ataques de fuerza bruta (Rate Limiting).
- Timeout por inactividad de sesión.
Casos de Uso Soportados
- Paneles de administración o portales en HTML directo (Views tradicionales).
- Funcionalidades API que devuelven JSON si se detecta la cabecera
Accept: application/jsonen los endpoints como/login.php, permitiendo la integración con un Frontend SPA / JS.
Instalación
-
Base de Datos
- Asegúrate de tener PostgreSQL ejecutándose.
- Crea tu base de datos (por ejemplo,
auth_db). - Ejecuta el script SQL para inicializar el esquema:
psql -U postgres -d auth_db -f auth/schema.sql
(Nota:
schema.sqlya incluye los rolesadmin,clienteysoporte, así como el permisoview_dashboard) -
Variables de Entorno
- Copia
.env.examplea.env:cp .env.example .env
- Edita el archivo
.envconfigurando los datos de tu conexión PDO hacia PostgreSQL.
- Copia
-
Ejecución Local (Servidor de Desarrollo)
composer start # o bien: php -S localhost:8013 -t public/
Pruebas de Uso
- Entra a
http://localhost:8013/register.phpy regístrate. Por seguridad y buena práctica, el sistema asume que eres unclientecomún sin el permisoview_dashboard. - Al ingresar e intentar navegar a
http://localhost:8013/dashboard.php, el sistema denegará el acceso. - Puedes entrar a la base de datos y ascender a tu usuario cambiando el
role_id = 1(admin) orole_id = 3(soporte). - Vuelve a iniciar sesión; ahora el Dashboard cargará sin problema.
En cualquier archivo (ya sea vista o endpoint API), solo requieres el autoload de Composer, session.php, y hacer uso de AuthRbac:
require '../vendor/autoload.php'; require_once __DIR__ . '/../auth/session.php'; use PhpAuth\AuthRbac; $manager = AuthRbac::getInstance(); // Protege que el usuario esté logueado obligatoriamente $manager->guard()->requireLogin(); // (Opcional) Protege por rol $manager->guard()->requireRole('admin'); // (Opcional) Protege por permiso $manager->guard()->requireCan('manage_users');