The thing nobody mentions up front: Drizzle connects as the postgres role, which bypasses RLS. Your policies do nothing for queries that go through Drizzle. Every query has to filter by user in code, and one missed where leaks notes.
If RLS is your safety net, use supabase-js (with @supabase/ssr on the server) for anything user-scoped. Use Drizzle for the schema, migrations and admin jobs, where bypassing RLS is what you want.