Row-Level Security en Supabase paso a paso
Clase 9 de 17 • Curso de Supabase Avanzado
Contenido del curso
Clase 9 de 17 • Curso de Supabase Avanzado
Contenido del curso
Byron López Urizar
John J. Meza
Jason Sepulveda
Ariel Lizarrga
Stiven Ramírez Arango
No olvides ver las dos clases anteriores ya que por alguna razon de la 6 se hace el saldo a esta clase y no se estan tomando en cuenta las clases 7 y 8 que es donde se crea la tabla de comments y likes
Acá el prompt:
Qué opciones debo marcar en RLS para hacer lo que digo a continuación: En profiles: permitir que cada usuario actualice solo su propio perfil. En posts: permitir insertar posts solo al usuario autenticado y leer posts de manera pública. En likes: permitir insertar o borrar likes solo del usuario autenticado. En comments: permitir que cada usuario agregue comentarios autenticado y leerlos públicamente
-- Enable RLS on tables ALTER TABLE public.profile ENABLE ROW LEVEL SECURITY; ALTER TABLE public.posts_new ENABLE ROW LEVEL SECURITY; ALTER TABLE public.likes ENABLE ROW LEVEL SECURITY; ALTER TABLE public.comments ENABLE ROW LEVEL SECURITY; -- profiles: users can select/update only their own profile CREATE POLICY "profiles_user_select" ON public.profile FOR SELECT TO authenticated USING ((SELECT auth.uid()) = id); CREATE POLICY "profiles_user_update" ON public.profile FOR UPDATE TO authenticated USING ((SELECT auth.uid()) = id) WITH CHECK ((SELECT auth.uid()) = id); -- posts_new: public SELECT (allow anonym), INSERT only authenticated (must set user_id = auth.uid()), owner can update/delete CREATE POLICY "posts_public_select" ON public.posts_new FOR SELECT TO public USING (true); CREATE POLICY "posts_insert_authenticated" ON public.posts_new FOR INSERT TO authenticated WITH CHECK ((SELECT auth.uid()) = user_id); CREATE POLICY "posts_owner_update" ON public.posts_new FOR UPDATE TO authenticated USING ((SELECT auth.uid()) = user_id) WITH CHECK ((SELECT auth.uid()) = user_id); CREATE POLICY "posts_owner_delete" ON public.posts_new FOR DELETE TO authenticated USING ((SELECT auth.uid()) = user_id); -- likes: authenticated can insert/delete only for themselves CREATE POLICY "likes_insert_authenticated" ON public.likes FOR INSERT TO authenticated WITH CHECK ((SELECT auth.uid()) = user_id); CREATE POLICY "likes_delete_owner" ON public.likes FOR DELETE TO authenticated USING ((SELECT auth.uid()) = user_id); -- comments: public SELECT, authenticated INSERT (user_id must equal auth.uid()), author can update/delete CREATE POLICY "comments_public_select" ON public.comments FOR SELECT TO public USING (true); CREATE POLICY "comments_insert_authenticated" ON public.comments FOR INSERT TO authenticated WITH CHECK ((SELECT auth.uid()) = user_id); CREATE POLICY "comments_owner_update" ON public.comments FOR UPDATE TO authenticated USING ((SELECT auth.uid()) = user_id) WITH CHECK ((SELECT auth.uid()) = user_id); CREATE POLICY "comments_owner_delete" ON public.comments FOR DELETE TO authenticated USING ((SELECT auth.uid()) = user_id);
Por que no activaste la funcionalidad del assistant para que te lea los schemas?
Policies necesarias para cada una de las tablas del proyecto:
-- profiles ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY; CREATE POLICY profiles_select_authenticated ON public.profiles FOR SELECT TO authenticated USING (id = (SELECT auth.uid())); CREATE POLICY profiles_insert_authenticated ON public.profiles FOR INSERT TO authenticated WITH CHECK (id = (SELECT auth.uid())); CREATE POLICY profiles_update_authenticated ON public.profiles FOR UPDATE TO authenticated USING (id = (SELECT auth.uid())) WITH CHECK (id = (SELECT auth.uid())); -- posts ALTER TABLE public.posts ENABLE ROW LEVEL SECURITY; CREATE POLICY posts_select_public ON public.posts FOR SELECT TO PUBLIC USING (true); CREATE POLICY posts_insert_authenticated ON public.posts FOR INSERT TO authenticated WITH CHECK (user_id = (SELECT auth.uid())); -- likes ALTER TABLE public.likes ENABLE ROW LEVEL SECURITY; CREATE POLICY likes_insert_authenticated ON public.likes FOR INSERT TO authenticated WITH CHECK (user_id = (SELECT auth.uid())); CREATE POLICY likes_delete_authenticated ON public.likes FOR DELETE TO authenticated USING (user_id = (SELECT auth.uid())); -- comments ALTER TABLE public.comments ENABLE ROW LEVEL SECURITY; CREATE POLICY comments_select_public ON public.comments FOR SELECT TO PUBLIC USING (true); CREATE POLICY comments_insert_authenticated ON public.comments FOR INSERT TO authenticated WITH CHECK (user_id = (SELECT auth.uid())); CREATE POLICY comments_update_authenticated ON public.comments FOR UPDATE TO authenticated USING (user_id = (SELECT auth.uid())) WITH CHECK (user_id = (SELECT auth.uid())); CREATE POLICY comments_delete_authenticated ON public.comments FOR DELETE TO authenticated USING (user_id = (SELECT auth.uid()));