Skip to content

arqel-dev/auth — API Reference

Namespace Arqel\Auth\. AbilityRegistry + PolicyDiscovery + middleware + traits.

Arqel\Auth\AbilityRegistry (final)

Singleton. Coordena abilities globais entre PHP e React (via auth.can shared prop).

MétodoTipoDescrição
registerGlobal(string)voidAdiciona uma ability ao registry (resolve via Gate::forUser)
registerGlobals(array<string>)voidBulk com dedupe
registerComputed(string, Closure)voidClosure invocada com ?Authenticatable
resolveForUser(?Authenticatable)array<ability, bool>Snapshot per-request cacheado por getAuthIdentifier()
clear()voidLimpa registry e cache

Globals são resolvidas via Gate::forUser($user)->allows($ability) (false para guests).

Arqel\Auth\PolicyDiscovery (final)

MétodoRetorna
autoRegisterPoliciesFor(array<class-string>)['registered' => array<modelClass, policyClass>, 'missing' => array<resourceClass>]

Heurística: troca \Models\ por \Policies\ no namespace e adiciona sufixo Policy. Honra Resource::$policy override (verificado com property_exists + class_exists). Resources que lançam exceção em getModel() ou que não existem são skippados graciosamente. Emite LoggerInterface::warning por Policy ausente.

Arqel\Auth\ArqelGate (final)

Facade integrada ao AbilityRegistry.

MétodoFunção
register(string, Closure) / abilities(string ...)Proxies do registry
allows(string, $args = []) / denies(string, $args = [])Via Gate::forUser(Auth::user())
snapshot()Alias para resolveForUser(Auth::user())

Arqel\Auth\Concerns\AuthorizesRequests trait

Para Arqel controllers. 3 oracles:

php
authorizeResource(class-string $resourceClass, string $action, ?Model $record = null): void
authorizeAction(object $action, ?Model $record = null): void
authorizeField(object $field, 'view'|'edit', ?Model $record = null): void

Cada um aborta 403 se o predicado falhar (silently allow quando nem gate nem policy registada — Resource Policies são user-owned).

Arqel\Auth\Http\Middleware\EnsureUserCanAccessPanel (final)

Gate de panel-level com ability configurável. DEFAULT_ABILITY = 'viewAdminPanel'.

Comportamento
Guestaborta 401
User com Gate::deniesaborta 403
Ability não registada com Gateallow-through (fresh install)
Custom ability via parâmetro->middleware(EnsureUserCanAccessPanel::class.':manageSettings')

HTTP — Auth flow

Arqel\Auth\Http\Controllers\LoginController (final)

Renderiza a página de login via Inertia. Passa como props:

php
[
  'loginUrl' => route('arqel.auth.login'),
  'registerUrl' => route('arqel.auth.register'),     // null se registo desligado
  'forgotPasswordUrl' => route('arqel.auth.password.request'),
  'canResetPassword' => bool,
]

As páginas Inertia ficam no pacote @arqel-dev/auth e são resolvidas pelo pages registry de createArqelApp:

Page nameComponente
arqel-dev/auth/LoginForm de login + hero (/arqel/login-hero.svg)
arqel-dev/auth/RegisterForm de registo
arqel-dev/auth/ForgotPasswordPedido de reset
arqel-dev/auth/ResetPasswordSubmissão de novo password
arqel-dev/auth/VerifyEmailAviso + reenvio

Companions: RegisterController, ForgotPasswordController, ResetPasswordController, VerifyEmailController. Todos seguem o mesmo padrão de passar URLs como Inertia props para evitar que o React bata em rotas hardcoded.

Helper global

php
arqel_can(string $ability, mixed $arguments = null): bool

Lookup order: AbilityRegistry snapshot (quando bound) primeiro, fallback para Gate::forUser($user)->allows. Retorna false para guests. Autoloaded via composer files.

Licença MIT — construído com Inertia + React + Laravel.