Håndtere tilgang med policyer
Implementer detaljert tilgangskontroll for filer ved hjelp av Supabase Storage-policyer, og sørg for datasikkerhet.
Håndtere tilgang med policyer er en gratis leksjon i Supabase som backend som tjeneste på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Supabase som backend som tjeneste, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Supabase som backend som tjeneste inneholder totalt 4 leksjoner.
Introduksjon til Storage Policies
Velkommen! I denne leksjonen skal vi se nærmere på Supabase Storage Policies. Disse policyene er nøkkelen til å kontrollere hvem som kan få tilgang til, laste opp eller slette filer i buckets.
Tenk på dem som sikkerhetsvakter for filene dine i skyen, som sørger for at bare autoriserte handlinger utføres.
Hvorfor lagringssikkerhet er viktig
Uten riktige policyer kan filene dine være sårbare. Hvem som helst kan potensielt laste opp skadelig innhold, eller sensitive brukerdata kan bli eksponert offentlig.
- Forhindre uautorisert tilgang: Hold private filer sikre.
- Kontroller opplastinger: Sørg for at bare legitime brukere kan legge til filer.
- Administrer sletting: Forhindre utilsiktet eller ondsinnet fjerning av filer.
Policyer er avgjørende for å bygge sikre applikasjoner.
Aktivere RLS for buckets
Akkurat som for databasetabeller bruker Supabase Storage Row-Level Security (RLS) for buckets. Før du kan bruke policyer, må RLS aktiveres for Storage-bucket-en din.
Du kan gjøre dette i Supabase-dashbordet under «Storage» ved å klikke på en bucket og slå på «Enable RLS», eller direkte med SQL:
ALTER TABLE storage.buckets
ENABLE ROW LEVEL SECURITY;Forstå policy-syntaks
Storage-policyer skrives med SQL, på samme måte som RLS for databaser. De angir hvilke handlinger som er tillatt (SELECT, INSERT, UPDATE, DELETE), og under hvilke betingelser.
Viktige deler av en policy:
- CREATE POLICY: Starter definisjonen av policyen.
- ON storage.objects: Angir hvilken tabell policyene gjelder for.
- FOR [action]: Definerer operasjonen (SELECT, INSERT, UPDATE, DELETE).
- USING / WITH CHECK: Angir betingelsene for policyen.
Policy: Offentlig lesetilgang
La oss opprette en policy som lar hvem som helst lese filer fra en bestemt bucket, for eksempel en «public-images»-bucket. Dette er vanlig for ressurser som profilbilder eller produktbilder.
Delen auth.role() = 'anon' betyr uautentiserte brukere, mens auth.role() = 'authenticated' betyr innloggede brukere. Her tillater vi begge.
CREATE POLICY "Allow public read access"
ON storage.objects FOR SELECT
TO public
USING (bucket_id = 'public-images');Policy: Opplastinger fra autentiserte brukere
La oss nå opprette en policy som bare lar autentiserte brukere laste opp filer til en «user-uploads»-bucket. Det er viktig at de bare kan laste opp til en mappe som er oppkalt etter deres egen bruker-ID.
Vi bruker auth.uid() for å hente ID-en til den aktuelle brukeren, og path_tokens[1] for å kontrollere den første delen av filbanen.
CREATE POLICY "Allow authenticated user upload"
ON storage.objects FOR INSERT
TO authenticated
WITH CHECK (bucket_id = 'user-uploads' AND auth.uid()::text = path_tokens[1]);Policy: Autentiserte brukere leser bare sine egne filer
Som et tillegg til opplastingspolicyen sørger vi for at autentiserte brukere bare kan lese filer de selv eier i «user-uploads»-bucket-en.
Denne policyen bruker auth.uid() til å samsvare med eieren av filen (som lagres i owner-kolonnen i storage.objects), og kontrollerer også filbanen.
CREATE POLICY "Allow authenticated user read their own"
ON storage.objects FOR SELECT
TO authenticated
USING (bucket_id = 'user-uploads' AND auth.uid() = owner);Tabellen storage.objects
Storage-policyer opererer på den skjulte tabellen storage.objects. Denne tabellen lagrer metadata om hver fil i buckets. Det er avgjørende å forstå kolonnene for å kunne skrive effektive policyer.
- id: Unik identifikator for objektet.
- bucket_id: ID-en til bucket-en objektet tilhører.
- name: Den fullstendige banen og filnavnet.
- owner:
auth.uid()for brukeren som lastet opp filen. - path_tokens: En tabell med strenger som representerer delene av filbanen.
Policy: Sletting kun for administratorer
Noen ganger bør bare bestemte brukere, for eksempel administratorer, kunne slette filer. La oss opprette en policy som bare tillater sletting hvis brukeren har en bestemt rolle, for eksempel rollen «admin».
Dette krever en egendefinert funksjon som kontrollerer brukerroller, eller du kan forenkle det ved å kontrollere en bestemt `owner`-UID hvis det bare finnes én administratorkonto.
CREATE POLICY "Allow admins to delete"
ON storage.objects FOR DELETE
TO authenticated
USING (bucket_id = 'sensitive-data' AND auth.jwt() ->> 'user_role' = 'admin');Effektiv testing av policyer
Etter at du har opprettet policyer, er det viktig å teste dem grundig. Du kan gjøre dette ved å:
- Logge inn som ulike brukere: Teste med autentiserte og uautentiserte brukere samt brukere med ulike roller.
- Forsøke å utføre forbudte handlinger: Prøve å laste opp, lese eller slette filer som policyene dine skal forhindre.
- Bruke Supabase-klienten: Foreta API-kall med
supabase-jseller andre klientbiblioteker, og undersøke svarene (for eksempel ved å forvente 403 Forbidden-feil).
Kontroller alltid at policyene fungerer som tiltenkt før du setter løsningen i produksjon.
Kort kontroll av policyer
Du har lært hvordan du oppretter ulike Storage-policyer. Hvilken av de følgende betingelsene vil la en autentisert bruker sette inn en fil i en bucket med navnet «private-docs» bare hvis filen plasseres i en mappe som samsvarer med bruker-ID-en?
Oppsummering: Storage Policies
Godt jobbet! Du har lært hvordan du sikrer Supabase Storage med policyer. Vi har gått gjennom:
- Hvor viktig RLS er for Storage-buckets.
- Hvordan du oppretter policyer for ulike handlinger (lesing, innsetting, sletting).
- Hvordan du bruker
auth.uid()ogpath_tokensfor detaljert kontroll. - Hvordan du forstår tabellen
storage.objects.
Det er avgjørende å implementere gode Storage-policyer for sikkerheten og integriteten til applikasjonens filhåndtering.
Lær deg Supabase som backend som tjeneste med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 11
- Leksjoner
- 40
Ofte stilte spørsmål
Er leksjonen «Håndtere tilgang med policyer» gratis?
Ja – hele teksten i «Håndtere tilgang med policyer» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Supabase som backend som tjeneste-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Supabase som backend som tjeneste inneholder totalt 4 leksjoner.
Hva lærer jeg i «Håndtere tilgang med policyer»?
Implementer detaljert tilgangskontroll for filer ved hjelp av Supabase Storage-policyer, og sørg for datasikkerhet. Du øver på Supabase som backend som tjeneste med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Supabase som backend som tjeneste?
Ingen tidligere erfaring er nødvendig. Supabase som backend som tjeneste på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Håndtere tilgang med policyer»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Supabase som backend som tjeneste-leksjonen?
Ja. Alle Supabase som backend som tjeneste-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Lagre filer i Supabase-bøtter
- Håndtere tilgang med policyer
- Laste opp og hente medier
- Bilde-transformasjoner og signerte URL-er