NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Sentinel for Laravel

Databázová schéma

Šesť migrácií len na publikovanie a len dopredu (bez down(), časová značka sa doplní pri publikovaní, balík ich nikdy nenačítava sám). Žiadna tabuľka balíka nepoužíva soft delete a žiadny model sa nedá vymeniť — bezpečnostný stav sa ukladá len cez tieto modely a engine.

#TabuľkaPripojenieCudzie kľúče
1sentinel_keyssentinel.database.connection—
2sentinel_checkpointspripojenie sealable modelu—
3sentinel_ledgerpripojenie sealable modelucheckpoint_id → sentinel_checkpoints (restrict)
4sentinel_sealspripojenie sealable modeluledger_entry_id → sentinel_ledger (restrict)
5sentinel_idempotency_keyssentinel.database.connection—
6sentinel_noncessentinel.database.connection—

Pečate, denník a kontrolné body žijú na pripojení každého zapečateného modelu a zdieľajú jeho transakciu. Ak máte zapečatené modely na viacerých pripojeniach, publikujte a spustite 0002–0004 na každom a uveďte ich v ledger.connections.

Prechod z predbežnej verzie

Migrácia 0004_create_sentinel_seals_table bola upravená priamo, aby pridala stĺpec attributes_mac s povolenou hodnotou null (MAC dokumentu atribútov pre pečate s vypočítanými poľami); nová migrácia neexistuje. Ak ste spustili staršiu predbežnú kópiu, migrácie znovu publikujte a 0004 spustite znova, alebo stĺpec do sentinel_seals pridajte sami — string('attributes_mac', 192)->nullable() — ešte pred ďalším zapečateným zápisom. Inštalácie z aktuálnych migrácií stĺpec už majú.

Modely

Čítajte ich na reporting (Seal::query()->where('key_id', $kid)->count()), nikdy do nich nezapisujte: každý zápis vlastní engine a úpravy zachytia MAC, reťaz aj obálky. Každá časová značka balíka sa castuje cez Casts\UtcDateTime (UTC, mikrosekundy, CarbonImmutable), takže časové pásmo aplikácie nikdy nepresiakne do uložených ani MAC-om chránených časov.

ModelTabuľkaPoznámky
Keysentinel_keys$hidden = ['envelope']; obálka je šifrový text AES-256-GCM viazaný na nešifrované stĺpce riadku, zapisuje a otvára ju úložisko kľúčov.
Sealsentinel_sealssealable(): MorphTo, sealedBy(): MorphTo, ledgerEntry(): BelongsTo; manifest / field_tags → array; event → SealEvent.
LedgerEntrysentinel_ledgerBez timestamps; len pripájanie (Eloquent update a delete vyhodia výnimku, aj tiché); sealable(), actor(), checkpoint().
Checkpointsentinel_checkpointsUPDATED_AT = null; len pripájanie.
IdempotencyKeysentinel_idempotency_keys$hidden = ['response', 'owner_token']; status je processing alebo completed.
Noncesentinel_noncesUPDATED_AT = null; subject(): MorphTo; kind → NonceKind.

Factories

  • KeyFactory — ->hmac(), ->ed25519(), ->ecdsaP256(), ->verifyOnly(), ->revoked(), ->retired(), ->pending(), ->ring(), všetky s platnými obálkami.
  • SealFactory — ->forSealable(Model $m, string $seal), štrukturálne platná, no nepodpísaná: pre testy Malformed a negatívne testy.
  • LedgerEntryFactory — ->forSealable(Model $m, string $seal), ->tombstone(SealEvent $event = SealEvent::Deleted); plus CheckpointFactory.
  • IdempotencyKeyFactory — ->processing(), ->completed(), ->expired().
  • NonceFactory — ->issued(), ->seen(), ->consumed(), ->expired().

Uchovávanie

TabuľkaRastie sČistenie
sentinel_sealsjeden riadok na (model, pečať)zmaže sa s tvrdo zmazanými modelmi
sentinel_ledgerjeden riadok na udalosť pečatenianikdy (dôkaz)
sentinel_checkpointsjeden riadok na dávku kontrolného bodunikdy
sentinel_keyskľúčenikdy (namiesto toho vyraďte alebo odvolajte)
sentinel_idempotency_keysidempotentné požiadavkysentinel:prune (expirované)
sentinel_noncesvydané a zapamätané noncesentinel:prune (expirované)

Ochrana tabuliek

Sentinel odhalí zmeny aj v týchto tabuľkách, no databázové oprávnenia manipuláciu sťažia už na začiatku. Používateľ aplikácie potrebuje INSERT a SELECT na sentinel_ledger a sentinel_checkpoints, na denníku len UPDATE (checkpoint_id) a jedno oprávnenie na zámok riadku, ktoré si vyžaduje každý engine, pretože sentinel:checkpoint zamyká koniec kontrolných bodov cez SELECT … FOR UPDATE. Nikdy nie DELETE. Prístupové údaje k úložisku kotvy držte oddelene od databázových.

-- PostgreSQL
GRANT SELECT, INSERT ON sentinel_ledger, sentinel_checkpoints TO app;
GRANT UPDATE (checkpoint_id) ON sentinel_ledger TO app;
GRANT UPDATE (seq) ON sentinel_checkpoints TO app;

-- MySQL
GRANT SELECT, INSERT ON app_db.sentinel_ledger TO 'app'@'%';
GRANT SELECT, INSERT ON app_db.sentinel_checkpoints TO 'app'@'%';
GRANT UPDATE (checkpoint_id) ON app_db.sentinel_ledger TO 'app'@'%';
GRANT LOCK TABLES ON app_db.* TO 'app'@'%';

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

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

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.