From 756335f78f7e61f0f1fc9f103143367100f22ba7 Mon Sep 17 00:00:00 2001 From: Lucas Santana Date: Fri, 7 Feb 2025 09:42:25 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20corrige=20pol=C3=ADticas=20RLS=20para=20?= =?UTF-8?q?an=C3=A1lise=20de=20reda=C3=A7=C3=B5es=20-=20Simplifica=20pol?= =?UTF-8?q?=C3=ADtica=20de=20inser=C3=A7=C3=A3o=20para=20service=5Frole=20?= =?UTF-8?q?-=20Adiciona=20pol=C3=ADticas=20para=20tabelas=20relacionadas?= =?UTF-8?q?=20-=20Melhora=20seguran=C3=A7a=20com=20pol=C3=ADticas=20espec?= =?UTF-8?q?=C3=ADficas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 7 ++ ...0326000003_fix_essay_analysis_policies.sql | 94 +++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 supabase/migrations/20240326000003_fix_essay_analysis_policies.sql diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b022b8..5fe7cc6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -257,3 +257,10 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/lang/pt-BR/). - Ajuste nas descrições dos campos para maior clareza - Alinhamento com as tabelas: essay_analyses, essay_analysis_feedback, essay_analysis_strengths e essay_analysis_improvements - Melhoria na validação dos dados com JSON Schema mais preciso + +### Técnico +- Correção das políticas de segurança (RLS) para o sistema de análise de redações: + - Simplificada a política de inserção para service_role + - Adicionadas políticas para tabelas relacionadas (feedback, pontos fortes, melhorias e notas) + - Melhorada a segurança com políticas específicas para cada operação + - Corrigido erro de permissão na inserção de análises pela Edge Function diff --git a/supabase/migrations/20240326000003_fix_essay_analysis_policies.sql b/supabase/migrations/20240326000003_fix_essay_analysis_policies.sql new file mode 100644 index 0000000..13ba4c5 --- /dev/null +++ b/supabase/migrations/20240326000003_fix_essay_analysis_policies.sql @@ -0,0 +1,94 @@ +-- Corrige as políticas de segurança para análises de redação +DROP POLICY IF EXISTS "Edge Function pode inserir análises" ON public.essay_analyses; +DROP POLICY IF EXISTS "Alunos podem ver análises de suas próprias redações" ON public.essay_analyses; + +-- Política para permitir que a service_role insira análises +CREATE POLICY "Service role pode inserir análises" + ON public.essay_analyses FOR INSERT + WITH CHECK (auth.jwt() ->> 'role' = 'service_role'); + +-- Política para permitir que alunos vejam suas análises +CREATE POLICY "Alunos podem ver suas análises" + ON public.essay_analyses FOR SELECT + USING ( + EXISTS ( + SELECT 1 + FROM public.student_essays + WHERE id = essay_id + AND student_id = auth.uid() + ) + ); + +-- Habilita RLS para tabelas relacionadas +ALTER TABLE public.essay_analysis_feedback ENABLE ROW LEVEL SECURITY; +ALTER TABLE public.essay_analysis_strengths ENABLE ROW LEVEL SECURITY; +ALTER TABLE public.essay_analysis_improvements ENABLE ROW LEVEL SECURITY; +ALTER TABLE public.essay_analysis_scores ENABLE ROW LEVEL SECURITY; + +-- Políticas para feedback +CREATE POLICY "Service role pode inserir feedback" + ON public.essay_analysis_feedback FOR INSERT + WITH CHECK (auth.jwt() ->> 'role' = 'service_role'); + +CREATE POLICY "Alunos podem ver feedback de suas análises" + ON public.essay_analysis_feedback FOR SELECT + USING ( + EXISTS ( + SELECT 1 + FROM public.essay_analyses a + JOIN public.student_essays e ON a.essay_id = e.id + WHERE a.id = analysis_id + AND e.student_id = auth.uid() + ) + ); + +-- Políticas para pontos fortes +CREATE POLICY "Service role pode inserir pontos fortes" + ON public.essay_analysis_strengths FOR INSERT + WITH CHECK (auth.jwt() ->> 'role' = 'service_role'); + +CREATE POLICY "Alunos podem ver pontos fortes de suas análises" + ON public.essay_analysis_strengths FOR SELECT + USING ( + EXISTS ( + SELECT 1 + FROM public.essay_analyses a + JOIN public.student_essays e ON a.essay_id = e.id + WHERE a.id = analysis_id + AND e.student_id = auth.uid() + ) + ); + +-- Políticas para pontos a melhorar +CREATE POLICY "Service role pode inserir pontos a melhorar" + ON public.essay_analysis_improvements FOR INSERT + WITH CHECK (auth.jwt() ->> 'role' = 'service_role'); + +CREATE POLICY "Alunos podem ver pontos a melhorar de suas análises" + ON public.essay_analysis_improvements FOR SELECT + USING ( + EXISTS ( + SELECT 1 + FROM public.essay_analyses a + JOIN public.student_essays e ON a.essay_id = e.id + WHERE a.id = analysis_id + AND e.student_id = auth.uid() + ) + ); + +-- Políticas para notas por critério +CREATE POLICY "Service role pode inserir notas" + ON public.essay_analysis_scores FOR INSERT + WITH CHECK (auth.jwt() ->> 'role' = 'service_role'); + +CREATE POLICY "Alunos podem ver notas de suas análises" + ON public.essay_analysis_scores FOR SELECT + USING ( + EXISTS ( + SELECT 1 + FROM public.essay_analyses a + JOIN public.student_essays e ON a.essay_id = e.id + WHERE a.id = analysis_id + AND e.student_id = auth.uid() + ) + ); \ No newline at end of file