Skip to content
docsv0.9.0

AuthOperationHttpPolicy

La política de la superficie HTTP con `milpa/auth`: qué exige una operación antes de correr. Es la implementación de {@see OperationHttpPolicy} que usa identidad de verdad: contexto verificado, scopes, permisos. El proyector que la consume no conoce nada de esto — exponer una operación por HTTP no obliga a instalar un sistema de autenticación, y exigir identidad no obliga a instalar un proyector. ── POR QUÉ TERMINÓ AQUÍ ──────────────────────────────────────────────────────────────────────── Vino de `milpa/skeleton` cuando éste se retiró como puerta de entrada (P14.3), pasó por `milpa/admin` —que ya requería identidad— y aterrizó donde debía estar desde el principio: usa `milpa/auth` de arriba a abajo, así que vive en `milpa/auth`. Ponerla en el panel obligaba a instalar diecinueve paquetes para servir una operación protegida por HTTP. Scope Y permission: una operación se tipa por uno o por el otro, nunca por los dos — `Operation` lo rechaza en su constructor. El `PolicyGate` de tool-runtime es defensa en profundidad específica de scope y no aplica a las tipadas por permiso.

AuthOperationHttpPolicy::__construct()

public function __construct(Psr\Container\ContainerInterface $container, Psr\Http\Message\ResponseFactoryInterface $responses, Psr\Http\Message\StreamFactoryInterface $streams):

El contenedor se pide como PSR-11 y no como el de la familia: este paquete es piso y lo único que hace con él es `has()`/`get()`. Pedir `DIContainerInterface` lo ataría a `milpa/core` por una capacidad que el estándar ya cubre — y el contenedor de la familia lo satisface, porque extiende PSR-11. Las fábricas PSR-17 también se inyectan, por lo mismo: no le elige a nadie su implementación de PSR-7. Quien monta la app ya tiene una.

Parameters

Parameters of __construct()
NameTypeDescription
$containerPsr\Container\ContainerInterface
$responsesPsr\Http\Message\ResponseFactoryInterface
$streamsPsr\Http\Message\StreamFactoryInterface

AuthOperationHttpPolicy::enforce()

public function enforce(Milpa\Command\Operation $op, Psr\Http\Message\ServerRequestInterface $request): ?Psr\Http\Message\ResponseInterface

`null` cuando la petición pasa; un 401/403 ya formado cuando `milpa/auth` la niega. Lanza {@see AuthMiddlewareNotInstalledException} (500) cuando la operación exige identidad y el host no cableó una cadena de autenticación: es la distinción de Rod, y es un error de servidor. Un 4xx culparía a quien llamó, que no hizo nada mal — el host declaró algo protegido y lo dejó sin guardia. Se conserva la excepción de `milpa/auth` y no la de console porque ésta lleva su `statusCode()` y su `errorCode()`, que es lo que un host ya mapea hoy; {@see UnguardedOperationException} cubre el otro caso, el de un host sin NINGUNA política.

Parameters

Parameters of enforce()
NameTypeDescription
$opMilpa\Command\Operation
$requestPsr\Http\Message\ServerRequestInterface

AuthOperationHttpPolicy::enforceScopes()

public function enforceScopes(Milpa\Command\Operation $op, Psr\Http\Message\ServerRequestInterface $request): ?Psr\Http\Message\ResponseInterface

La compuerta de scopes, cerrada por defecto. `RequireScopeMiddleware` lee el {@see AuthContext} que un {@see AuthenticateMiddleware} río arriba dejó en `'milpa.auth'` y lanza la negativa tipada; el handler centinela sólo corre si admitió la petición.

Parameters

Parameters of enforceScopes()
NameTypeDescription
$opMilpa\Command\Operation
$requestPsr\Http\Message\ServerRequestInterface

AuthOperationHttpPolicy::enforcePermission()

public function enforcePermission(Milpa\Command\Operation $op, Psr\Http\Message\ServerRequestInterface $request): ?Psr\Http\Message\ResponseInterface

La contraparte tipada por permiso, espejo de {@see self::enforceScopes()}. Corre sólo la compuerta honesta de `RequirePermission`: el `PolicyGate` de tool-runtime razona sobre scopes y aplicarlo aquí sería juzgar con la vara equivocada.

Parameters

Parameters of enforcePermission()
NameTypeDescription
$opMilpa\Command\Operation
$requestPsr\Http\Message\ServerRequestInterface

AuthOperationHttpPolicy::authChainInstalled()

public function authChainInstalled(): bool

Si el host cableó una cadena capaz de producir un {@see AuthContext} verificado. Cuando no hay ninguna, una operación con scopes no se puede hacer cumplir honestamente — y eso es configuración del host, no una petición fallida.

AuthOperationHttpPolicy::enforceWebPolicy()

public function enforceWebPolicy(Milpa\Command\Operation $op, Psr\Http\Message\ServerRequestInterface $request): ?Psr\Http\Message\ResponseInterface

Defensa en profundidad para una petición YA autorizada: reconstruye el {@see ToolContext::web()} honesto y lo pasa por el mismo {@see PolicyGate} que guarda MCP. Opt-in: no hace nada si `milpa/tool-runtime` no está instalado.

Parameters

Parameters of enforceWebPolicy()
NameTypeDescription
$opMilpa\Command\Operation
$requestPsr\Http\Message\ServerRequestInterface