Difference between sudo() and with_env() in Odoo.

sudo()


Executes operations as superuser

Ignores access rights and record rules


with_env()


Changes the execution environment

Can switch user, context, or company

Does not automatically bypass security


✅ sudo() Example


order = self.env['sale.order'].sudo().browse(order_id)

order.write({'note': 'Updated by system'})


Useful for cron jobs

❌ Dangerous if used incorrectly


✅ ​with_env() Example

new_env = self.env(user=self.env.ref('base.user_admin').id)

order = self.env['sale.order'].with_env(new_env)

order.write({'note': 'Updated as Admin'})



✔️ Controlled environment

✔️ Useful in multi-user logic



✅ Key Difference


Feature                                     sudo()          with_env()

Bypass access rules              ✅                         ❌

Change user                            ❌                         ✅

Safer                                           ❌                         ✅