Spaces:
Sleeping
Sleeping
| -- Create the bug_reports table | |
| CREATE TABLE IF NOT EXISTS public.bug_reports ( | |
| id UUID DEFAULT gen_random_uuid() PRIMARY KEY, | |
| user_id UUID REFERENCES auth.users(id) ON DELETE SET NULL, -- Nullable because anon users might report bugs | |
| bug_title TEXT NOT NULL, | |
| description TEXT NOT NULL, | |
| steps_to_reproduce TEXT, | |
| expected_result TEXT, | |
| actual_result TEXT, | |
| severity TEXT NOT NULL CHECK (severity IN ('Low', 'Medium', 'High', 'Critical')), | |
| category TEXT NOT NULL CHECK (category IN ('UI Issue', 'Performance', 'Functionality Broken', 'Security Issue', 'Other')), | |
| contact_permission BOOLEAN DEFAULT false, | |
| diagnostic_data JSONB DEFAULT '{}'::jsonb, | |
| status TEXT DEFAULT 'Open' CHECK (status IN ('Open', 'In Progress', 'Resolved', 'Closed')), | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL | |
| ); | |
| -- Turn on Row Level Security | |
| ALTER TABLE public.bug_reports ENABLE ROW LEVEL SECURITY; | |
| -- Allow anyone (even anonymous) to insert a bug report. | |
| -- For a SaaS dashboard, usually only authenticated users are reporting, | |
| -- but in an open demo it's safer to allow inserts. | |
| CREATE POLICY "Allow public inserts" ON public.bug_reports | |
| FOR INSERT | |
| WITH CHECK (true); | |
| -- Allow admins OR the creator to view reports | |
| CREATE POLICY "Users can view their own reports" ON public.bug_reports | |
| FOR SELECT | |
| USING (auth.uid() = user_id); | |
| CREATE POLICY "Super Admins and Admins can view all reports" ON public.bug_reports | |
| FOR SELECT | |
| USING ( | |
| EXISTS ( | |
| SELECT 1 FROM public.profiles | |
| WHERE profiles.id = auth.uid() AND (profiles.role = 'admin' OR profiles.role = 'master_admin') | |
| ) | |
| ); | |
| -- Grant privileges | |
| GRANT ALL ON TABLE public.bug_reports TO authenticated; | |
| GRANT ALL ON TABLE public.bug_reports TO anon; | |
| GRANT ALL ON TABLE public.bug_reports TO service_role; | |