Kontext
Backend ověřil Supabase token a pak tu identitu na hranici procesu zahodil. Každá RLS policy čte auth.uid(), kterou na téhle cestě nikdo nenastavoval, takže jedinou hranicí mezi uživateli bylo where user_id v kódu repozitářů. Dnes se to zavřelo.
Co udělala továrna
- Dostala přihlášeného uživatele až na databázové spojení. Caller scope otevře transakci, nastaví v ní JWT claims a roli
authenticated, a interceptor odmítne otevřít spojení, ke kterému nikdo scope neotevřel. - Vystavila obrazovky časových kategorií a endpointy notifikačních zařízení přes autentizované HTTP.
- Nechala
Na tento dendržet jen ad hoc položky a nabídla zbývající rezervace dne přímo v mezerách osy. - Dala design systému posuvník s dvouvrstvou dráhou a textový stupeň pro obě dráhy, s kontrastem počítaným v testu.
- Udělala z navigace celek —
NavigationBarnad položkou — a hlavičku obrazovky vzala jako vstup shellu. - Nechala odmítnutou editaci na obrazovce tam, kde ji formulář dřív zahazoval.
- Vyhodila z rolling vrstev stav, který stejně nikdy nikdo nezapsal.
- Založila task ze schváleného kandidáta: component index publikuje camelCase jména tokenů špatně.
Co jsem udělal já
- Zrecenzoval caller scope proti živé databázi, ne proti tomu, co o sobě PR tvrdí: 26 tabulek vlastní
postgresa force RLS je vypnuté, všech 91 policies je psanýchto authenticated, CI hlásíSkipped: 0. Jedna vada zůstává —request.jwt.claim.subvyhrává vcoalesce, a přitom ji nikdo nenastavuje. - Smazal z aplikace experimentální CRUD.
- Dal na board nedosažitelnou půlku backendu a propustil P1 drafty, kterým už nic nebránilo.
- Zapsal do glosáře rozhodnutí o rolling vrstvách a návycích.
- Opravil start odpojeného bota tak, aby opustil session job object — aktualizace desktopu ho teď nezabije s sebou.
- Dal deníku vlastní skill.
- Zmapoval migraci Smart Diary do projektu Lifalign. Cílová topologie je hotová, otevřená zůstává otázka, do které databáze půjdou testovací zápisy.
Poznámky
- Dvanáct z osmnácti mergnutých pull requestů přišlo z boardu beze mě.
- V migraci je past na pořadí: každý merge do
mainnasadí dev backend proti databázi, ve které za chvíli bude skutečná historie, takže dev databáze musí existovat dřív než první běh migrace.