mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-24 02:51:13 -05:00
Refine profile privacy controls
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
-- Drop the problematic view that's causing security issues
|
||||
DROP VIEW IF EXISTS public.public_profiles;
|
||||
|
||||
-- Instead, let's create a simpler and safer approach using just RLS policies
|
||||
-- The view was too complex and triggered security warnings
|
||||
|
||||
-- Remove the overly permissive policy I created earlier
|
||||
DROP POLICY IF EXISTS "Allow viewing basic profile info" ON public.profiles;
|
||||
|
||||
-- Create more specific, safer RLS policies for different use cases
|
||||
|
||||
-- Policy for users to view their own complete profile
|
||||
CREATE POLICY "Users can view their own complete profile"
|
||||
ON public.profiles
|
||||
FOR SELECT
|
||||
USING (auth.uid() = user_id);
|
||||
|
||||
-- Policy for moderators/admins to view all profiles
|
||||
CREATE POLICY "Moderators can view all profiles"
|
||||
ON public.profiles
|
||||
FOR SELECT
|
||||
USING (is_moderator(auth.uid()));
|
||||
|
||||
-- Policy for public access to profiles - but ONLY basic safe fields are accessible via application logic
|
||||
-- This policy allows the row to be returned, but sensitive fields should be filtered out by application code
|
||||
CREATE POLICY "Public access to non-private profiles with field restrictions"
|
||||
ON public.profiles
|
||||
FOR SELECT
|
||||
USING (
|
||||
privacy_level = 'public'
|
||||
AND NOT banned
|
||||
);
|
||||
|
||||
-- The security will be enforced in the application layer using our can_view_profile_field function
|
||||
-- This approach is safer than trying to restrict field access in RLS policies
|
||||
Reference in New Issue
Block a user