fix: guests
* make guest status a flag on users * add logout handlers * add logout notification for other users
This commit is contained in:
parent
23630b19b2
commit
60a6680eaf
21 changed files with 523 additions and 601 deletions
|
|
@ -68,24 +68,6 @@ EXCEPTION
|
|||
END;
|
||||
$$ LANGUAGE plpgsql STABLE;
|
||||
|
||||
-- Set current guest session ID for RLS
|
||||
CREATE OR REPLACE FUNCTION public.set_current_guest_session_id(guest_session_id UUID)
|
||||
RETURNS VOID AS $$
|
||||
BEGIN
|
||||
PERFORM set_config('app.current_guest_session_id', guest_session_id::TEXT, false);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Get current guest session ID for RLS
|
||||
CREATE OR REPLACE FUNCTION public.current_guest_session_id()
|
||||
RETURNS UUID AS $$
|
||||
BEGIN
|
||||
RETURN NULLIF(current_setting('app.current_guest_session_id', true), '')::UUID;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN RETURN NULL;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql STABLE;
|
||||
|
||||
-- Check if current user is a server admin
|
||||
CREATE OR REPLACE FUNCTION public.is_server_admin()
|
||||
RETURNS BOOLEAN AS $$
|
||||
|
|
@ -318,4 +300,34 @@ COMMENT ON FUNCTION scene.clear_stale_instance_members(DOUBLE PRECISION) IS
|
|||
GRANT EXECUTE ON FUNCTION scene.clear_all_instance_members() TO chattyness_app;
|
||||
GRANT EXECUTE ON FUNCTION scene.clear_stale_instance_members(DOUBLE PRECISION) TO chattyness_app;
|
||||
|
||||
-- =============================================================================
|
||||
-- Guest Cleanup Functions
|
||||
-- =============================================================================
|
||||
|
||||
-- Clean up stale guest accounts that haven't been active in 7 days
|
||||
-- Guests are users with the 'guest' tag in auth.users
|
||||
-- Uses SECURITY DEFINER to bypass RLS
|
||||
CREATE OR REPLACE FUNCTION auth.cleanup_stale_guests()
|
||||
RETURNS INTEGER AS $$
|
||||
DECLARE
|
||||
deleted_count INTEGER;
|
||||
BEGIN
|
||||
WITH deleted AS (
|
||||
DELETE FROM auth.users
|
||||
WHERE 'guest' = ANY(tags)
|
||||
AND last_seen_at < now() - interval '7 days'
|
||||
RETURNING id
|
||||
)
|
||||
SELECT count(*) INTO deleted_count FROM deleted;
|
||||
|
||||
RETURN deleted_count;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
|
||||
COMMENT ON FUNCTION auth.cleanup_stale_guests() IS
|
||||
'Removes guest accounts (users with guest tag) inactive for 7+ days. Run via cron.';
|
||||
|
||||
-- Grant execute to chattyness_app
|
||||
GRANT EXECUTE ON FUNCTION auth.cleanup_stale_guests() TO chattyness_app;
|
||||
|
||||
COMMIT;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue