story-generator/supabase/migrations/20240320000003_create_phonics_policies.sql
Lucas Santana 350a66bb9e
Some checks are pending
Docker Build and Push / build (push) Waiting to run
feat: implementa sistema de exercícios f��nicos
- Cria estrutura completa de banco de dados para exerc��cios f��nicos

- Implementa tabelas para categorias, tipos, exerc��cios e palavras

- Adiciona sistema de progresso e conquistas do estudante

- Configura pol��ticas de seguran��a RLS para prote����o dos dados

- Otimiza performance com ��ndices e relacionamentos apropriados

BREAKING CHANGE: Nova estrutura de banco de dados para exerc��cios f��nicos
2025-01-17 20:59:50 -03:00

124 lines
4.1 KiB
SQL

-- Enable RLS
ALTER TABLE phonics_exercise_categories ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_exercise_types ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_exercises ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_words ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_exercise_words ENABLE ROW LEVEL SECURITY;
ALTER TABLE media_types ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_exercise_media ENABLE ROW LEVEL SECURITY;
ALTER TABLE student_phonics_progress ENABLE ROW LEVEL SECURITY;
ALTER TABLE student_phonics_attempts ENABLE ROW LEVEL SECURITY;
ALTER TABLE student_phonics_attempt_answers ENABLE ROW LEVEL SECURITY;
ALTER TABLE achievement_types ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_achievements ENABLE ROW LEVEL SECURITY;
ALTER TABLE student_phonics_achievements ENABLE ROW LEVEL SECURITY;
-- Políticas para categorias
CREATE POLICY "Categorias visíveis para usuários autenticados"
ON phonics_exercise_categories FOR SELECT
TO authenticated
USING (true);
-- Políticas para tipos de exercícios
CREATE POLICY "Tipos de exercícios visíveis para usuários autenticados"
ON phonics_exercise_types FOR SELECT
TO authenticated
USING (true);
-- Políticas para exercícios
CREATE POLICY "Exercícios visíveis para usuários autenticados"
ON phonics_exercises FOR SELECT
TO authenticated
USING (is_active = true);
-- Políticas para palavras
CREATE POLICY "Palavras visíveis para usuários autenticados"
ON phonics_words FOR SELECT
TO authenticated
USING (true);
-- Políticas para relação exercício-palavras
CREATE POLICY "Relações exercício-palavras visíveis para usuários autenticados"
ON phonics_exercise_words FOR SELECT
TO authenticated
USING (true);
-- Políticas para tipos de mídia
CREATE POLICY "Tipos de mídia visíveis para usuários autenticados"
ON media_types FOR SELECT
TO authenticated
USING (true);
-- Políticas para mídia dos exercícios
CREATE POLICY "Mídia dos exercícios visível para usuários autenticados"
ON phonics_exercise_media FOR SELECT
TO authenticated
USING (true);
-- Políticas para progresso do estudante
CREATE POLICY "Progresso visível apenas para o próprio estudante"
ON student_phonics_progress FOR SELECT
TO authenticated
USING (auth.uid() = student_id);
CREATE POLICY "Progresso pode ser inserido pelo próprio estudante"
ON student_phonics_progress FOR INSERT
TO authenticated
WITH CHECK (auth.uid() = student_id);
CREATE POLICY "Progresso pode ser atualizado pelo próprio estudante"
ON student_phonics_progress FOR UPDATE
TO authenticated
USING (auth.uid() = student_id)
WITH CHECK (auth.uid() = student_id);
-- Políticas para tentativas
CREATE POLICY "Tentativas visíveis apenas para o próprio estudante"
ON student_phonics_attempts FOR SELECT
TO authenticated
USING (auth.uid() = student_id);
CREATE POLICY "Tentativas podem ser inseridas pelo próprio estudante"
ON student_phonics_attempts FOR INSERT
TO authenticated
WITH CHECK (auth.uid() = student_id);
-- Políticas para respostas das tentativas
CREATE POLICY "Respostas visíveis apenas para o próprio estudante"
ON student_phonics_attempt_answers FOR SELECT
TO authenticated
USING (EXISTS (
SELECT 1 FROM student_phonics_attempts
WHERE id = attempt_id AND student_id = auth.uid()
));
CREATE POLICY "Respostas podem ser inseridas pelo próprio estudante"
ON student_phonics_attempt_answers FOR INSERT
TO authenticated
WITH CHECK (EXISTS (
SELECT 1 FROM student_phonics_attempts
WHERE id = attempt_id AND student_id = auth.uid()
));
-- Políticas para tipos de conquistas
CREATE POLICY "Tipos de conquistas visíveis para usuários autenticados"
ON achievement_types FOR SELECT
TO authenticated
USING (true);
-- Políticas para conquistas
CREATE POLICY "Conquistas visíveis para usuários autenticados"
ON phonics_achievements FOR SELECT
TO authenticated
USING (true);
-- Políticas para conquistas do estudante
CREATE POLICY "Conquistas do estudante visíveis apenas para o próprio estudante"
ON student_phonics_achievements FOR SELECT
TO authenticated
USING (auth.uid() = student_id);
CREATE POLICY "Conquistas podem ser inseridas pelo próprio estudante"
ON student_phonics_achievements FOR INSERT
TO authenticated
WITH CHECK (auth.uid() = student_id);