---
title: "Middleware, pravidlo a scopes — Sentinel for Laravel | Roundly"
description: "Overte modely routy cez sentinel.verified, validujte vstup pravidlom IntactSeal, kontrolujte kolekcie cez verifySeals() a filtrujte podľa stavu pečate."
url: https://roundly-consulting.com/sk/open-source/navody/sentinel-for-laravel/middleware-a-pravidla
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Sentinel for Laravel](https://roundly-consulting.com/sk/open-source/navody/sentinel-for-laravel.md)

# Middleware, pravidlo a scopes

| Alias | Trieda | Parametre | Správanie |
| --- | --- | --- | --- |
| `sentinel.verified` | `Http\Middleware\VerifySeals` | žiadne = každý model routy; alebo param\[@seal\],… | Overí modely routy po route-model bindingu; zlyhanie odpovie middleware.verified\_status (409) so všeobecnou správou — nikdy nie so stavom či dôvodom. |
| `sentinel.idempotent` | `Http\Middleware\EnsureIdempotency` | optional (predvolené) alebo required, voliteľne TTL v sekundách | Idempotenčné kľúče. |
| `sentinel.signed` | `Http\Middleware\VerifyHttpSignature` | voliteľný názov profilu | Podpisy HTTP správ. |
| `sentinel.single-use` | `Http\Middleware\ConsumeSingleUseUrl` | — | Jednorazové URL. |

Odporúčané poradie: sentinel.signed → auth → sentinel.idempotent → (route-model binding) → sentinel.verified.

## sentinel.verified

```php
Route::get('/invoices/{invoice}', ShowInvoice::class)->middleware('sentinel.verified');
Route::put('/invoices/{invoice}/lines/{line}', UpdateLine::class)->middleware('sentinel.verified:invoice@financial');
```

- Beží po route-model bindingu — ak ho deklarujete ako middleware routy v skupinách web alebo api, platí to automaticky. Pomenovaný parameter bez @seal overí všetky pečate daného modelu.
- Zlyhanie pri middleware.verified\_reaction = abort (predvolené) vyhodí SealVerificationFailedHttpException: status middleware.verified\_status (409) a všeobecnú preloženú správu — stav ani dôvod sa klientovi nikdy neprezradia. Jej getPrevious() je TamperedModelException pre report() vo vašom exception handleri.
- S report sa zistenie nahlási (TamperDetected, log) a požiadavka pokračuje.
- Pomenovaný parameter, ktorý nie je naviazaný alebo nie je zapečatiteľný, vyhodí SealingMisconfiguredException (500, bezpečné zlyhanie).

## Typované parametre

Každý middleware má statického pomocníka, ktorý sa overí už pri deklarácii routy — preklep zlyhá pri načítaní rout, nie až pri požiadavke:

| Pomocník | Overí |
| --- | --- |
| `VerifySeals::using(string ...$parameters)` | Každý ^\[A-Za-z0-9\_\]{1,64}(@\[a-z0-9\_.-\]{1,64})?$; žiadny = každý sealable parameter. |
| `EnsureIdempotency::optional(?int $ttl = null) / required(?int $ttl = null)` | TTL 60–2 592 000 sekúnd (vlastný rozsah middleware). |
| `VerifyHttpSignature::profile(?string $profile = null)` | Profil existuje v sentinel.signatures.profiles; null = predvolený profil. |

```php
use RoundlyConsulting\Sentinel\Http\Middleware\EnsureIdempotency;
use RoundlyConsulting\Sentinel\Http\Middleware\VerifyHttpSignature;
use RoundlyConsulting\Sentinel\Http\Middleware\VerifySeals;

Route::put('/invoices/{invoice}', UpdateInvoice::class)->middleware(VerifySeals::using('invoice@financial'));
Route::post('/orders', StoreOrder::class)->middleware(EnsureIdempotency::required(ttl: 3600));
Route::post('/partner/events', PartnerEvents::class)->middleware(VerifyHttpSignature::profile('partners'));
```

## IntactSeal a verifySeals()

```php
use RoundlyConsulting\Sentinel\Rules\IntactSeal;

$request->validate([
    'invoice_id' => ['required', new IntactSeal(Invoice::class, seal: 'financial')],                        // the key
    'invoice_number' => ['required', new IntactSeal(Invoice::class, seal: 'financial', column: 'number')],  // a unique column
]);

$report = Invoice::query()->withSeals()->get()->verifySeals();   // reuses the eager-loaded seals
Invoice::query()->whereSealed()->count();
Invoice::query()->whereNotSealed('identity')->get();
```

new IntactSeal(string $model, ?string $seal = null, ?string $column = null): vstupom je kľúč modelu alebo hodnota stĺpca column — neplatný názov stĺpca vyhodí SealingMisconfiguredException::invalidColumn už pri vytvorení pravidla, nie pri jeho behu. Model sa načíta s pozastaveným overením pri načítaní a potom sa overí (jedna pečať, alebo všetky, ak žiadnu neuvediete): chýbajúci model zlyhá ako exists, model, ktorý nie je neporušený, so sentinel::validation.intact\_seal — stav ani dôvod sa neprezradia.

## Makrá

| Makro | Čo robí |
| --- | --- |
| `Http::withIdempotencyKey(?string $key = null)` | Pošle hlavičku idempotency.header (Idempotency-Key) so zadaným kľúčom alebo novým UUIDv7, serializovaným ako reťazec RFC 9651. |
| `Http::withSignature(string $keyId, ?SigningOptions $options = null)` | Podpíše finálnu požiadavku (RFC 9421) kľúčom odchádzajúceho kruhu cez SentinelManager::signRequest(). |
| `$collection->verifySeals(?string $seal = null)` | VerificationReport nad Eloquent kolekciou; použije eager-loadované riadky pečatí. |

Makrá HTTP klienta sa registrujú na PendingRequest pri štarte a verifySeals() na Eloquent kolekciách — každé len vtedy, ak makro s rovnakým názvom ešte neexistuje.

## Query scopes

```php
Invoice::query()->whereSealed()->get();               // has a seal row for the default seal
Invoice::query()->whereSealed('identity')->get();
Invoice::query()->whereNotSealed()->count();          // no seal row (unsealed or deleted)
Invoice::query()->withSeals()->get();                 // eager-load sentinelSeals
```

$invoice->sentinelSeals je vzťah MorphMany k uloženým riadkom Models\\Seal.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/sentinel-for-laravel.md)
