RECORD RULES

How to restrict user access to records in Odoo

Add a record rule to the user's Access Profile scoping which records they can see — their own, their team's, one company's, or a custom condition on the record itself. This is separate from model and field permissions: a user can be fully allowed to open a model and still be restricted to a subset of its records.

Access Management dashboard — who is restricted, who is expiring, what they can still do
01

Decide the scope

Own records, manager-chain ('own + subordinates'), company, or a custom field match.

02

Apply it to the profile

Combine with model and field rules as needed — the layers stack.

03

Check it holds in reports

Record restrictions should apply in pivot and graph views too, not just lists.

Own, team, company

Pick a scope before you write a domain

Own records: salesperson sees their pipeline. Own + subordinates: a manager sees the team. One company: the local entity. Custom: a tag, a team_id, a warehouse. Those are the four conversations. A raw domain is for the fifth. Record rules without code is how you compile them without XML.

This is not a hidden menu and not a filter on one list. Odoo’s record rules apply to read, write, create, unlink — and to reports if they are real rules.

Reports

If the pivot is wrong, the rule is wrong

Open the sales analysis or invoice pivot as that user. If other people’s documents inflate the total, you have a list filter. Multi-company is where this bites — multi-company access control.

Also test the URL of a record they should not see, and an API search_read with no domain. The rule must still constrain the result.

Stacking

Rules stack with model and field rights

A user can be allowed on sale.order, blocked from margin, and limited to their own rows. Three layers, one profile. Do not create a new group for each layer. Limit employee permissions is the overview; this page is the row layer.

Global ir.rule experiments belong on staging. A broken global rule is a company-wide outage. Named profiles with an exempt admin are how you avoid that.

Questions

Before you set it up

Is a record rule the same as hiding a menu?

No. Menus are navigation. Record rules decide which rows exist for that user after they are allowed on the model. Odoo record rules · Menu vs model.

What scopes are typical?

Own records, manager-chain, one company, or a custom domain. Record rules without code.

Do these rules hold in reports?

They should, including pivot and graph totals. If a total still includes other people’s rows, you have a filter, not a rule. Multi-company access.

Ready to lock this down?

Try it on the live sandbox first — nothing to install.