Introduce First-Party Authorization Library with Adapter-Based RBAC Support
@charoyan88 ya está trabajando en esto.
Desde el 15/1/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Summary
Quantum Framework currently provides a robust first-party Auth library (session & JWT) that fully covers authentication concerns.
However, there is no first-party solution for authorization (permissions / access control).
This leads to:
- role checks scattered across controllers, services, and middlewares
- inconsistent authorization patterns across projects
- tight coupling between business logic and authentication details
This ticket proposes introducing a first-party Authorization library, designed in full alignment with QF architecture and philosophy:
- adapter-based (no runtime branching)
- explicit and class-driven
- backward compatible
- service-first
- middleware-safe
Goals
- Introduce a dedicated Authorization library (
Quantum\Libraries\Authorization) - Keep Auth and Authorization strictly separated
- Use permissions as the primary authorization primitive
- Support RBAC as the initial authorization model
- Allow multiple permission sources via adapters (config-based, DB-based)
- Preserve Laravel-like DX (
user()->can()) via delegation - Integrate cleanly with QF middlewares (no parameters)
- Provide a safe migration path from
users.role→ full RBAC tables
Non-Goals (v1)
- No ABAC / policies
- No route DSL or parameterized middleware
- No UI or admin tooling
- No breaking changes to Auth
- No removal of
users.role
Core Principles (QF-Aligned)
- Auth answers “who are you?”
- Authorization answers “what can you do?”
- Services enforce authorization
- Middlewares are coarse-grained gates
- Adapters decide behavior — methods never branch
- Explicit classes over magic strings
Proposed Structure
Quantum/Libraries/Authorization/
├── AuthorizationService.php
├── AuthorizationFactory.php
├── Authorization.php
├── Contracts/
│ └── PermissionResolverInterface.php
├── Adapters/
│ ├── ConfigPermissionAdapter.php
│ └── DatabasePermissionAdapter.php
└── Exceptions/
└── AuthorizationException.php
Core API
AuthorizationService
$authorization->can(User $user, string $permission, mixed $context = null): bool;
$authorization->authorize(User $user, string $permission, mixed $context = null): void;
User Convenience (DX Only)
$user->can('post.publish');
$user->authorize('post.publish');
Important:
- User does not implement authorization logic
- User only delegates to AuthorizationService
Adapter-Based Authorization (No Runtime Branching)
interface PermissionResolverInterface
{
public function can(User $user, string $permission, mixed $context = null): bool;
}
Middleware Integration (IMPORTANT)
Constraint
QtMiddleware::apply() does NOT accept parameters.
Correct Pattern
Each authorization middleware represents a named permission gate.
abstract class PermissionMiddleware extends QtMiddleware
{
public function apply(Request $request, Response $response, Closure $next)
{
$user = auth()->user();
if (!$user || !$user->can('post.publish')) {
return $response->setStatus(403);
}
return $next($request, $response);
}
}
Migration Path Summary
- Config RBAC +
users.role - Introduce RBAC tables
- Sync config → DB
- Switch adapter
- Backfill
user_roles - Deprecate
users.role
Acceptance Criteria
- Authorization is a first-party library
- Adapter-based resolution via factory
- No runtime branching based on config
- Middleware respects QtMiddleware constraints
- Service-level authorization enforced
- Backward compatibility preserved
- Lenguaje dominante
- PHP
- Estrellas
- 36
- Forks
- 22
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de quantum-php/framework
-
routing testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
quantum-php/framework#547 ·
-
view
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
quantum-php/framework#542 ·
-
enhancement http
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
quantum-php/framework#565 · 1 comentario ·
-
components view
Dificultad 5/5 Más de una semana Aptitud para principiantes 42/100
quantum-php/framework#551 ·
-
Add explicit @version special route token support for API major versioning within a single moduleAbiertorouting
Dificultad 5/5 Más de una semana Aptitud para principiantes 45/100
quantum-php/framework#550 ·
Todos los issues de quantum-php/framework
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
521xueweihan/HelloGitHub#3790 ·
-
[Bug] : Main navigation "Upcoming Events" link navigates to /events/ without query parameterAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
benjaminkott/bootstrap_package#1670 ·
-
sync-en
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 2 días