Toegangsrechten per tabel
Voor elke tabel moet vastliggen wie welke rij mag lezen, aanpassen of verwijderen. Niet in de interface, maar in de database zelf. Controleer dit opnieuw na elke nieuwe functie.
Je hebt met Lovable iets gebouwd dat werkt. Je klikt erdoorheen, het doet wat het moet doen, en de volgende stap lijkt klein: live zetten. In de praktijk zit daar het meeste werk. Niet omdat Lovable slecht bouwt, maar omdat een demo andere eisen kent dan een app waar echte gebruikers en hun gegevens in zitten. Hieronder staat wat er dan nog moet gebeuren en waar je de keuze hebt tussen zelf oplossen en overdragen.
Dezelfde app, andere eisen. Dat verschil is de hele klus.
Zolang je zelf door je app klikt, is er weinig aan de hand. Jij weet welke knoppen je niet moet indrukken, jij vult geldige gegevens in en jij bent de enige die de database ziet. Zodra je de link deelt, valt die bescherming weg. Bezoekers doen dingen die jij nooit zou doen, en sommigen kijken bewust verder dan de interface.
Dat is het kernpunt: Lovable bouwt de interface en de logica die jij beschrijft, maar de vraag wie welke gegevens mag zien is een aparte laag. Die laag zit in je database, niet in je schermen. Een gebruiker die de app niet via jouw knoppen benadert maar rechtstreeks de database bevraagt, komt langs alles wat je in de interface hebt geregeld.
Voor een intern experiment of een demo aan je team is dat prima. Voor een app met klantgegevens, betalingen of persoonsgegevens is het de eerste plek waar je moet kijken. Lees ook of vibe coding klaar is voor productie voor het bredere beeld.
Toegangsrechten op de database zijn het bekendste struikelblok, en niet alleen bij jou.
Lovable gebruikt voor data en inloggen doorgaans Supabase. Daar regel je toegang met Row Level Security: regels die per tabel bepalen welke rij een ingelogde gebruiker mag zien of wijzigen. Staat die beveiliging uit of is de regel te ruim, dan kan iedereen met de publieke sleutel uit je pagina de tabel rechtstreeks uitlezen.
Dat is geen theoretisch scenario. In 2025 werd hiervoor CVE-2025-48757 geregistreerd, een kwetsbaarheid met een hoge ernstscore die precies dit patroon beschrijft bij Lovable-projecten: ontbrekende of ontoereikende Row Level Security, waardoor gegevens zonder inloggen op te vragen waren. De documentatie van Supabase legt uit hoe die regels werken.
Belangrijker dan die ene melding is het mechanisme erachter. Elke keer dat je een nieuwe functie laat bouwen, komt er vaak een nieuwe tabel bij. Die tabel erft je eerdere instellingen niet automatisch. Een app die vorige week netjes dichtzat, kan na een nieuwe functie weer openstaan. Het is dus geen eenmalige controle maar iets dat bij elke uitbreiding terugkomt.
Vijf onderwerpen komen bij vrijwel elke overgang van demo naar live terug.
Voor elke tabel moet vastliggen wie welke rij mag lezen, aanpassen of verwijderen. Niet in de interface, maar in de database zelf. Controleer dit opnieuw na elke nieuwe functie.
Alles wat in de browser terechtkomt, is leesbaar voor bezoekers. Sleutels met beheerdersrechten horen daar nooit te staan. Die horen aan de serverkant, in omgevingsvariabelen.
Wachtwoordherstel, bevestiging per mail, hoe lang een sessie geldig blijft en wat er gebeurt bij uitloggen. Dit werkt zelden compleet zonder dat iemand er expliciet naar kijkt.
Wat ziet iemand als een aanvraag mislukt of het internet wegvalt? Zonder afhandeling blijft een scherm leeg of loopt het vast, en jij ziet niet dat het gebeurd is.
Je wilt weten dat er iets stukging voordat een gebruiker het meldt. Zonder logging en meldingen merk je storingen pas als iemand belt.
Testdata uit je demo hoort niet in productie. Bepaal wat mee moet, wat weg kan en hoe je later een back-up terugzet als het misgaat.
Een deel is te doen met de documentatie erbij. Een deel vraagt iemand die het patroon herkent.
Niet omdat je het niet kunt, maar omdat de tijd ergens anders meer oplevert.
Wij bouwen dagelijks met dit soort tools, dus we kennen zowel de snelheid als de rekening.
Lovable is goed in wat het belooft: van een beschrijving naar iets klikbaars, sneller dan je zelf kunt typen. De fout die we vaak zien is niet dat mensen het gebruiken, maar dat ze de demo aanzien voor het eindproduct. Tussen die twee zit werk dat weinig met bouwen te maken heeft en veel met beoordelen.
Zit je vast in dat stuk, dan kun je twee dingen doen. Je kunt zelf de beveiliging nalopen en de code onderhoudbaar maken, of je laat iemand meekijken die dit patroon vaker heeft gezien. Wij doen dat laatste onder vastgelopen met een AI-builder.
Is je app nog niet gebouwd en twijfel je of dit de route is, dan is het gesprek anders. Dan gaat het niet over herstellen maar over scope: welke flow wil je aantoonbaar werkend zien, en wat kan er dan in één werkdag af. Dat is een prettiger startpunt dan achteraf repareren.
Technisch wel, maar je zet dan ook de standaardinstellingen live. Loop in elk geval de toegangsrechten op je database na en controleer of er geen sleutels in je paginacode staan voordat je de link deelt met mensen buiten je eigen team.
Dat zijn regels in je database die per tabel bepalen welke rijen een gebruiker mag zien of aanpassen. Zonder die regels regelt alleen je interface de toegang, en een interface kun je omzeilen door de database rechtstreeks te bevragen.
Dat is te kort door de bocht. De tool kan veilige apps opleveren, maar de standaardinstellingen zijn gericht op snel bouwen en niet op live gaan. De beveiliging is werk dat jij of iemand namens jou expliciet moet doen, en dat blijft terugkomen bij elke nieuwe functie.
Meestal niet. In veel gevallen zijn het gerichte aanpassingen: toegangsregels aanzetten, sleutels verplaatsen, foutafhandeling toevoegen. Opnieuw beginnen is pas logisch als het datamodel zo gegroeid is dat elke wijziging iets anders breekt.
Lovable werkt met een gewone codebase die je kunt exporteren en koppelen aan je eigen repository. Dat is ook precies wat een andere partij nodig heeft om het over te nemen, dus regel die toegang voordat je iemand laat meekijken.
Dat hangt af van hoe ver de app is en wat je live wilt hebben. Zinniger dan een bedrag is eerst bepalen wat er precies moet werken. Neem contact op en we lopen in een intake door wat er staat en wat er nog nodig is.
Stuur ons wat je hebt gebouwd. In een intake kijken we mee wat er nog moet gebeuren en wat daarvan in één werkdag te doen is.
Een korte intake volgt na je inschrijving. Daarna stemmen we scope en datum af.
We nemen contact op om de intake in te plannen.
We gebruiken cookies om je ervaring te verbeteren en het gebruik van de site te meten.