mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 18:19:43 +00:00
Implement E2EE and message content moderation
This commit is contained in:
1 parent
e1ff87dc03
commit
198cd80dfd
74 files changed
+12939
-2178
No files matched your search
@@ -0,0 +1,52 @@
|
||||
-- Add deleted_at column to messages table for "delete for everyone"
|
||||
ALTER TABLE messages ADD COLUMN deleted_at TIMESTAMPTZ;
|
||||
|
||||
-- Create message_deletions table for "delete for self" (per-user deletions)
|
||||
CREATE TABLE message_deletions (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
message_id UUID NOT NULL REFERENCES messages(id) ON DELETE CASCADE,
|
||||
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
||||
deleted_at TIMESTAMPTZ DEFAULT now(),
|
||||
UNIQUE(message_id, user_id)
|
||||
);
|
||||
|
||||
-- Index for efficient lookup when filtering messages
|
||||
CREATE INDEX idx_message_deletions_user_message ON message_deletions(user_id, message_id);
|
||||
CREATE INDEX idx_messages_deleted_at ON messages(deleted_at) WHERE deleted_at IS NOT NULL;
|
||||
|
||||
-- Enable RLS on message_deletions
|
||||
ALTER TABLE message_deletions ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- RLS Policies for message_deletions
|
||||
|
||||
-- Users can view their own deletions (needed for filtering)
|
||||
CREATE POLICY "Users can view own deletions"
|
||||
ON message_deletions FOR SELECT
|
||||
USING (user_id = auth.uid());
|
||||
|
||||
-- Users can insert their own deletions (for messages in their matches)
|
||||
CREATE POLICY "Users can delete messages for self"
|
||||
ON message_deletions FOR INSERT
|
||||
WITH CHECK (
|
||||
user_id = auth.uid() AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM messages m
|
||||
JOIN matches ma ON ma.id = m.match_id
|
||||
JOIN profiles p ON p.couple_id = ma.couple_id
|
||||
WHERE m.id = message_deletions.message_id
|
||||
AND p.id = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
-- Update messages RLS policy to allow authors to set deleted_at
|
||||
CREATE POLICY "Authors can soft delete messages for everyone"
|
||||
ON messages FOR UPDATE
|
||||
USING (user_id = auth.uid())
|
||||
WITH CHECK (user_id = auth.uid());
|
||||
|
||||
-- Add to realtime for live updates
|
||||
ALTER PUBLICATION supabase_realtime ADD TABLE message_deletions;
|
||||
|
||||
-- Comments for documentation
|
||||
COMMENT ON COLUMN messages.deleted_at IS 'Timestamp when message was deleted for everyone (author-only action). Shows "Message deleted" to all users.';
|
||||
COMMENT ON TABLE message_deletions IS 'Per-user message deletions for "delete for self" functionality. Message still visible to other user.';
|
||||
Reference in new issue
Block a user