Granskningslogg
På Zkrinet: lägg till blocket under Byggblock i panelen — ett klick, din egen kod rörs inte och en ögonblicksbild tas först. Installationsstegen nedan gäller om du kör PocketBase själv, till exempel efter en export.
Vem ändrade vad, och när — för varje post som skapas, ändras eller raderas via API:t (din app, adminpanelen och batch-anrop). Loggen är manipuleringssäker: varje rad bär en SHA-256-hash av sitt eget innehåll plus föregående rads hash. Ändras eller raderas en rad i efterhand syns det direkt.
Testat mot PocketBase 0.40.4.
#Installation
Kopiera pb_hooks/ och pb_migrations/ till din PocketBase och starta om. Loggningen börjar direkt.
#Vad som loggas
En rad i zk_granskning per ändring:
| Fält | Innehåll |
|---|---|
nr | Löpnummer, utan luckor |
samling, post_id, handling | Vad: create / update / delete |
vem_typ, vem_id, vem_samling | Vem: superuser, anvandare eller gast |
andringar | Skapad: alla värden. Ändrad: bara fält som ändrats, med före och efter. Raderad: värdena den hade. |
tid | När (UTC) |
ip | Bara om påslaget (se nedan) |
foregaende, hash | Kedjan |
Hemligheter loggas aldrig. Dolda fält visas som (dolt fält) och lösenordsbyten som (lösenord) — varken värdet eller hashen hamnar i loggen.
En ändring som inte ändrar något, och anrop som misslyckas, ger ingen rad. Ett batch-anrop som misslyckas rullas tillbaka helt — loggraderna också — så loggen påstår aldrig en ändring som inte blev av.
#Kontrollera kedjan
GET /api/zk/granskning/verifiera (superuser)
→ { "ok": true, "rader": 1532, "sista_nr": 1532, "fel": [] }
Är något fel står det vilken rad och vad: "Raden har ändrats efter att den skrevs." eller "Rad 40–41 saknas."
Loggen kan inte ändras eller raderas via API:t — inte ens av superusers.
#Inställningar (miljövariabler)
| Variabel | Standard | Vad |
|---|---|---|
ZK_GRANSKNING_SAMLINGAR | alla | Kommaseparerad lista om bara vissa samlingar ska loggas |
ZK_GRANSKNING_IP | av | 1 = spara avsändarens IP. IP-adresser är personuppgifter — slå bara på det om du har ett skäl, och nämn det i din integritetspolicy. |
ZK_GRANSKNING_DAGAR | av (spara för alltid) | Rensa rader äldre än så många dagar (varje natt 03:17, eller POST /api/zk/granskning/rensa). Bara de äldsta raderna i följd tas bort, så kedjan förblir hel. |
Systemets egna samlingar (_superusers m.fl.) och pluginsamlingar (zk_…) loggas inte.
#Begränsningar — läs innan du lovar en kund något
- Bara ändringar via API:t. Ändringar som görs direkt i serverkod (andra hooks, cron-jobb, migreringar) loggas inte.
- Manipuleringssäker, inte manipuleringsomöjlig. Den som har tillgång till själva databasfilen kan ändra rader — men kan inte göra det utan att kedjan bryts. Den som raderar hela loggen eller de äldsta raderna kan heller inte upptäckas av kedjan själv; vill du skydda dig mot det, spara
sista_nr+hashnågon annanstans med jämna mellanrum. - I ett batch-anrop kan raderna komma i omvänd ordning (PocketBase kör batchens delar nästlade).
- Går loggningen fel (t.ex. full disk) har ändringen redan genomförts — felet skrivs i serverloggen.
#Testa
./bank.py granskningslogg
12 tester: vem/vad/när, gäst och superuser, att hemligheter aldrig loggas, tomma ändringar och fel, urval, IP, att loggen är låst, att kedjan avslöjar både ändrade och raderade rader, batch (lyckad och misslyckad), och rensning. Säkerhetstesterna är verifierade med mutanter.