If your app is multi-tenant, row-level security is probably doing less than you think. RLS scopes rows, but it cannot express "this row is yours, the plan column is not" — so a tenant can pass every policy you wrote and still upgrade their own account for free. I found exactly that in my own production platform, and closed it.