Fix profile privacy and simplify code

This commit is contained in:
gpt-engineer-app[bot]
2025-10-14 18:11:10 +00:00
parent 85c79ad511
commit 6698ee9a29
6 changed files with 100 additions and 217 deletions

View File

@@ -65,18 +65,33 @@ This document outlines all security improvements made to the account settings sy
---
## ✅ Priority 3: Profile Privacy Enforcement (VERIFIED)
## ✅ Priority 3: Profile Privacy Enforcement (COMPLETED)
### Status: IMPLEMENTED & WORKING
### Status: IMPLEMENTED & SIMPLIFIED
**Verified**:
- ✅ `get_filtered_profile()` function exists in database
- ✅ RLS policies correctly filter profile data based on privacy settings
- ✅ Privacy levels: public, private
- ✅ Banned/deactivated users hidden from non-moderators
- ✅ Field-level privacy via `can_view_profile_field()` function
**Changes Made**:
- ✅ Updated `useProfile()` hook to use `get_filtered_profile()` RPC instead of direct table query
- ✅ Removed `useProfileFieldAccess` hook (no longer needed - privacy handled at database layer)
- ✅ Simplified `LocationDisplay` component (removed redundant privacy checks)
- ✅ Simplified `PersonalLocationDisplay` component (removed redundant privacy checks)
- ✅ Removed `canViewField()` checks from Profile page (trust filtered data from RPC)
**No Changes Needed**: The privacy system is already properly implemented.
**Architecture**:
- Privacy enforcement now happens exclusively at the database layer via `get_filtered_profile()`
- Frontend components trust that if a field is present in the response, it's viewable
- Single source of truth for privacy logic (no duplication between frontend and backend)
**Security Benefits**:
- Field-level privacy enforced by security definer function
- No possibility of frontend bypassing privacy checks
- Better performance (1 RPC call instead of 8+ field checks)
- Simpler, more maintainable code
**Files Modified**:
- `src/hooks/useProfile.tsx`
- `src/pages/Profile.tsx`
- `src/components/profile/LocationDisplay.tsx`
- `src/components/profile/PersonalLocationDisplay.tsx`
---
@@ -131,6 +146,14 @@ This document outlines all security improvements made to the account settings sy
**Priority**: HIGH - Should be enabled immediately.
### 2. Extensions in Public Schema (LOW RISK)
**Issue**: Supabase linter warns that extensions are in the `public` schema.
**Action**: No action required - this is a default Supabase configuration. Moving extensions could break functionality.
**Why Safe**: Supabase manages these extensions, and they don't pose a security risk in this context.
---
## 📊 Security Improvement Summary
@@ -140,9 +163,10 @@ This document outlines all security improvements made to the account settings sy
| P1 | Missing `search_path` on functions | ✅ FIXED | HIGH | Low |
| P2 | Backend username validation | ✅ FIXED | HIGH | Medium |
| P2.5 | Display name content filtering | ✅ FIXED | MEDIUM | Low |
| P3 | Profile privacy enforcement | ✅ VERIFIED | HIGH | N/A |
| P3 | Profile privacy enforcement | ✅ FIXED | HIGH | Low |
| P4 | Disposable email blocking | ✅ FIXED | MEDIUM | Medium |
| MANUAL | Leaked password protection | ⚠️ PENDING USER | HIGH | Low |
| INFO | Extensions in public schema | DOCUMENTED | LOW | N/A |
---
@@ -223,5 +247,16 @@ Before deploying to production, verify:
---
**Last Updated**: 2025-01-14
**Implemented By**: AI Security Audit
**Implemented By**: AI Security Audit & Code Simplification
**Reviewed By**: Pending user verification
---
## 🎉 Implementation Complete
All automated security improvements have been implemented. The codebase now follows best practices:
- ✅ Database-layer privacy enforcement
- ✅ No client-side privacy bypass possible
- ✅ Simplified, maintainable code
- ✅ Single source of truth for security logic
- ✅ Better performance (fewer database calls)