mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 10:19:43 +00:00
Update
This commit is contained in:
1 parent
adab288a3a
commit
d1ca114285
10 files changed
+985
No files matched your search
@@ -0,0 +1,91 @@
|
||||
-- Update RLS policies to allow partner premium access
|
||||
-- When either user OR their partner has is_premium = TRUE, both can access premium packs
|
||||
|
||||
-- Drop existing premium pack policy
|
||||
DROP POLICY IF EXISTS "Premium users can view premium packs" ON public.question_packs;
|
||||
|
||||
-- Create new policy that checks couple premium status
|
||||
-- Access granted if: pack is not premium OR user is premium OR partner is premium
|
||||
CREATE POLICY "Users or partners with premium can view premium packs"
|
||||
ON public.question_packs FOR SELECT
|
||||
USING (
|
||||
is_premium = FALSE OR
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.profiles p
|
||||
WHERE p.id = auth.uid()
|
||||
AND (
|
||||
p.is_premium = TRUE OR
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.profiles partner
|
||||
WHERE partner.couple_id = p.couple_id
|
||||
AND partner.couple_id IS NOT NULL
|
||||
AND partner.id != p.id
|
||||
AND partner.is_premium = TRUE
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
-- Update questions policy similarly
|
||||
DROP POLICY IF EXISTS "Anyone can view questions in visible packs" ON public.questions;
|
||||
|
||||
CREATE POLICY "Users can view questions in accessible packs"
|
||||
ON public.questions FOR SELECT
|
||||
USING (
|
||||
pack_id IN (
|
||||
SELECT qp.id FROM public.question_packs qp
|
||||
WHERE qp.is_public = TRUE
|
||||
AND (
|
||||
qp.is_premium = FALSE OR
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.profiles p
|
||||
WHERE p.id = auth.uid()
|
||||
AND (
|
||||
p.is_premium = TRUE OR
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.profiles partner
|
||||
WHERE partner.couple_id = p.couple_id
|
||||
AND partner.couple_id IS NOT NULL
|
||||
AND partner.id != p.id
|
||||
AND partner.is_premium = TRUE
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
-- Create a helper function to check premium access for a user
|
||||
-- This can be used in application code and other policies
|
||||
CREATE OR REPLACE FUNCTION public.has_premium_access(check_user_id UUID)
|
||||
RETURNS BOOLEAN AS $$
|
||||
DECLARE
|
||||
user_premium BOOLEAN;
|
||||
partner_premium BOOLEAN;
|
||||
user_couple_id UUID;
|
||||
BEGIN
|
||||
-- Get user's premium status and couple_id
|
||||
SELECT is_premium, couple_id INTO user_premium, user_couple_id
|
||||
FROM public.profiles
|
||||
WHERE id = check_user_id;
|
||||
|
||||
-- If user is premium, return true
|
||||
IF user_premium = TRUE THEN
|
||||
RETURN TRUE;
|
||||
END IF;
|
||||
|
||||
-- If user has no couple, return false
|
||||
IF user_couple_id IS NULL THEN
|
||||
RETURN FALSE;
|
||||
END IF;
|
||||
|
||||
-- Check if partner is premium
|
||||
SELECT is_premium INTO partner_premium
|
||||
FROM public.profiles
|
||||
WHERE couple_id = user_couple_id
|
||||
AND id != check_user_id
|
||||
LIMIT 1;
|
||||
|
||||
RETURN COALESCE(partner_premium, FALSE);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER STABLE;
|
||||
Reference in new issue
Block a user