31 lines
989 B
PL/PgSQL
31 lines
989 B
PL/PgSQL
-- Migration 119: Add brand_id to regenerate_headgate_token for ownership enforcement
|
|
CREATE OR REPLACE FUNCTION regenerate_headgate_token(p_headgate_id UUID, p_brand_id UUID)
|
|
RETURNS JSONB
|
|
LANGUAGE plpgsql
|
|
SECURITY DEFINER
|
|
AS $$
|
|
DECLARE
|
|
v_new_token UUID;
|
|
v_headgate_brand_id UUID;
|
|
BEGIN
|
|
-- Verify headgate exists and belongs to brand
|
|
SELECT brand_id INTO v_headgate_brand_id
|
|
FROM water_headgates
|
|
WHERE id = p_headgate_id AND deleted_at IS NULL;
|
|
|
|
IF NOT FOUND THEN
|
|
RETURN jsonb_build_object('success', false, 'error', 'Headgate not found');
|
|
END IF;
|
|
|
|
-- Brand scoping: if brand_id is not null, enforce ownership
|
|
IF p_brand_id IS NOT NULL AND v_headgate_brand_id != p_brand_id THEN
|
|
RETURN jsonb_build_object('success', false, 'error', 'Not authorized');
|
|
END IF;
|
|
|
|
v_new_token := gen_random_uuid();
|
|
UPDATE water_headgates SET headgate_token = v_new_token WHERE id = p_headgate_id;
|
|
|
|
RETURN jsonb_build_object('success', true, 'token', v_new_token);
|
|
END;
|
|
$$;
|