Kodėl RLS svarbu
Be RLS bet kuris prisijungęs vartotojas, turintis viešąjį raktą, gali užklausti visą lentelę. RLS (Row Level Security) leidžia nustatyti taisykles, kurios eilutės kuriam vartotojui matomos ar keičiamos – ir tai galioja pačioje duomenų bazėje, ne tik kode.
AIPamokos.lt RLS užtikrina, kad studentas matytų tik savo registracijas ir kreditus, o mokytojas – tik savo pamokų studentus.
Politikos (policies)
Politika – tai taisyklė lentelei: kas gali SELECT, INSERT, UPDATE ar DELETE. Pavyzdžiui, „studentas mato tik tas registracijas, kur student_id = auth.uid()“.
- USING – kontroliuoja, kurios eilutės matomos/keičiamos.
- WITH CHECK – kontroliuoja, ką galima įrašyti ar atnaujinti.
- auth.uid() – grąžina prisijungusio vartotojo ID.
Dažna klaida: rekursija
Jei politika vienoje lentelėje užklausia kitą lentelę, kurios politika vėl užklausia pirmąją, gausi „infinite recursion“ (42P17) klaidą. Sprendimas – iškelti tikrinimą į SECURITY DEFINER funkciją, kuri apeina RLS ir nutraukia ciklą.
Geros praktikos
- Įjunk RLS kiekvienai lentelei su privačiais duomenimis.
- Jautrius veiksmus (kreditų pridėjimą, išmokas) daryk per SECURITY DEFINER funkcijas.
- Testuok politikas kaip skirtingi vartotojai, ne tik kaip admin.