mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 13:11:12 -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