Fix SQL errors in RLS policy scripts

- Remove profiles.role reference (column doesn't exist)
- Use simplified policies (all authenticated users can modify)
- Drop all existing storage policies before creating new ones to avoid conflicts
- Fix policy already exists error in STORAGE_RLS_FIX.sql

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
dwindown
2025-12-24 14:42:37 +07:00
parent 9fdcf07439
commit 8441063f0c
2 changed files with 22 additions and 83 deletions

View File

@@ -9,9 +9,11 @@
ALTER TABLE platform_settings ENABLE ROW LEVEL SECURITY;
-- Step 2: Drop existing policies (if any)
DROP POLICY IF EXISTS "Anyone can view platform settings" ON platform_settings;
DROP POLICY IF EXISTS "Public can view platform settings" ON platform_settings;
DROP POLICY IF EXISTS "Authenticated can view platform settings" ON platform_settings;
DROP POLICY IF EXISTS "Admins can update platform settings" ON platform_settings;
DROP POLICY IF EXISTS "Admins can insert platform settings" ON platform_settings;
DROP POLICY IF EXISTS "Admins can delete platform settings" ON platform_settings;
-- Step 3: Create policies
@@ -22,54 +24,31 @@ ON platform_settings FOR SELECT
TO public
USING (true);
-- Policy 2: Allow authenticated users to SELECT platform_settings
CREATE POLICY "Authenticated can view platform settings"
ON platform_settings FOR SELECT
TO authenticated
USING (true);
-- Policy 3: Allow admins to UPDATE platform_settings
CREATE POLICY "Admins can update platform settings"
-- Policy 2: Allow authenticated users to UPDATE platform_settings
-- (Simplified - all authenticated users can update for now)
CREATE POLICY "Authenticated can update platform settings"
ON platform_settings FOR UPDATE
TO authenticated
USING (
EXISTS (
SELECT 1 FROM profiles
WHERE profiles.id = auth.uid()
AND profiles.role = 'admin'
)
);
USING (true)
WITH CHECK (true);
-- Policy 4: Allow admins to INSERT platform_settings
CREATE POLICY "Admins can insert platform settings"
-- Policy 3: Allow authenticated users to INSERT platform_settings
CREATE POLICY "Authenticated can insert platform settings"
ON platform_settings FOR INSERT
TO authenticated
WITH CHECK (
EXISTS (
SELECT 1 FROM profiles
WHERE profiles.id = auth.uid()
AND profiles.role = 'admin'
)
);
WITH CHECK (true);
-- Policy 5: Allow admins to DELETE platform_settings
CREATE POLICY "Admins can delete platform settings"
-- Policy 4: Allow authenticated users to DELETE platform_settings
CREATE POLICY "Authenticated can delete platform settings"
ON platform_settings FOR DELETE
TO authenticated
USING (
EXISTS (
SELECT 1 FROM profiles
WHERE profiles.id = auth.uid()
AND profiles.role = 'admin'
)
);
USING (true);
-- =====================================================
-- VERIFICATION
-- =====================================================
-- Test as public (should return data)
-- Run this in a new SQL window without authentication:
SELECT * FROM platform_settings;
-- Check current policies
@@ -78,38 +57,10 @@ SELECT
policyname,
permissive,
roles,
cmd,
qual,
with_check
cmd
FROM pg_policies
WHERE tablename = 'platform_settings';
-- =====================================================
-- ALTERNATIVE: Simpler policies (if profile check doesn't work)
-- =====================================================
-- If the above policies don't work, use these simpler versions:
-- DROP POLICY IF EXISTS "Admins can update platform settings" ON platform_settings;
-- DROP POLICY IF EXISTS "Admins can insert platform settings" ON platform_settings;
-- DROP POLICY IF EXISTS "Admins can delete platform settings" ON platform_settings;
--
-- -- Allow all authenticated users to modify (less secure, but works)
-- CREATE POLICY "Authenticated can update platform settings"
-- ON platform_settings FOR UPDATE
-- TO authenticated
-- USING (true)
-- WITH CHECK (true);
--
-- CREATE POLICY "Authenticated can insert platform settings"
-- ON platform_settings FOR INSERT
-- TO authenticated
-- WITH CHECK (true);
--
-- CREATE POLICY "Authenticated can delete platform settings"
-- ON platform_settings FOR DELETE
-- TO authenticated
-- USING (true);
-- =====================================================
-- TROUBLESHOOTING
-- =====================================================
@@ -124,4 +75,3 @@ SELECT COUNT(*) as row_count FROM platform_settings;
-- Check current user
SELECT auth.uid();
SELECT * FROM profiles WHERE id = auth.uid();