File size: 2,115 Bytes
81ff144
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
-- Task ownership policies for project owners
-- Apply this migration to existing Supabase projects after schema.sql.

ALTER TABLE public.tasks ENABLE ROW LEVEL SECURITY;

DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM pg_policies
        WHERE schemaname = 'public'
          AND tablename = 'tasks'
          AND policyname = 'Project owners can create tasks'
    ) THEN
        CREATE POLICY "Project owners can create tasks" ON public.tasks
            FOR INSERT TO authenticated WITH CHECK (
                EXISTS (
                    SELECT 1 FROM public.projects
                    WHERE projects.id = tasks.project_id
                      AND projects.owner_id = auth.uid()
                )
            );
    END IF;

    IF NOT EXISTS (
        SELECT 1 FROM pg_policies
        WHERE schemaname = 'public'
          AND tablename = 'tasks'
          AND policyname = 'Project owners can update tasks'
    ) THEN
        CREATE POLICY "Project owners can update tasks" ON public.tasks
            FOR UPDATE TO authenticated USING (
                EXISTS (
                    SELECT 1 FROM public.projects
                    WHERE projects.id = tasks.project_id
                      AND projects.owner_id = auth.uid()
                )
            ) WITH CHECK (
                EXISTS (
                    SELECT 1 FROM public.projects
                    WHERE projects.id = tasks.project_id
                      AND projects.owner_id = auth.uid()
                )
            );
    END IF;

    IF NOT EXISTS (
        SELECT 1 FROM pg_policies
        WHERE schemaname = 'public'
          AND tablename = 'tasks'
          AND policyname = 'Project owners can delete tasks'
    ) THEN
        CREATE POLICY "Project owners can delete tasks" ON public.tasks
            FOR DELETE TO authenticated USING (
                EXISTS (
                    SELECT 1 FROM public.projects
                    WHERE projects.id = tasks.project_id
                      AND projects.owner_id = auth.uid()
                )
            );
    END IF;
END $$;

NOTIFY pgrst, 'reload schema';