mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 10:11:13 -05:00
Update function to bypass RLS
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
-- Update claim_specific_submission function to bypass RLS
|
||||
CREATE OR REPLACE FUNCTION public.claim_specific_submission(
|
||||
p_submission_id UUID,
|
||||
p_moderator_id UUID,
|
||||
p_lock_duration INTERVAL DEFAULT '15 minutes'
|
||||
) RETURNS BOOLEAN
|
||||
LANGUAGE plpgsql
|
||||
SECURITY DEFINER
|
||||
SET search_path = public
|
||||
AS $$
|
||||
DECLARE
|
||||
rows_updated INTEGER;
|
||||
BEGIN
|
||||
-- Temporarily disable RLS for this transaction
|
||||
SET LOCAL row_security = off;
|
||||
|
||||
-- Atomically update the submission if it's unclaimed or lock expired
|
||||
UPDATE content_submissions
|
||||
SET
|
||||
assigned_to = p_moderator_id,
|
||||
assigned_at = NOW(),
|
||||
locked_until = NOW() + p_lock_duration,
|
||||
first_reviewed_at = COALESCE(first_reviewed_at, NOW())
|
||||
WHERE id = p_submission_id
|
||||
AND (
|
||||
assigned_to IS NULL
|
||||
OR locked_until < NOW()
|
||||
)
|
||||
AND status = 'pending';
|
||||
|
||||
GET DIAGNOSTICS rows_updated = ROW_COUNT;
|
||||
|
||||
-- Re-enable RLS (will auto-reset at end of transaction anyway)
|
||||
SET LOCAL row_security = on;
|
||||
|
||||
-- Log the action if successful
|
||||
IF rows_updated > 0 THEN
|
||||
BEGIN
|
||||
PERFORM log_admin_action(
|
||||
p_moderator_id,
|
||||
(SELECT user_id FROM content_submissions WHERE id = p_submission_id),
|
||||
'submission_claimed',
|
||||
jsonb_build_object(
|
||||
'submission_id', p_submission_id,
|
||||
'claim_type', 'specific'
|
||||
)
|
||||
);
|
||||
EXCEPTION WHEN OTHERS THEN
|
||||
RAISE WARNING 'Failed to log submission claim audit: %', SQLERRM;
|
||||
END;
|
||||
|
||||
RETURN TRUE;
|
||||
END IF;
|
||||
|
||||
RETURN FALSE;
|
||||
END;
|
||||
$$;
|
||||
Reference in New Issue
Block a user