Drie lagen security
Odoo-security bestaat grofweg uit groepen, access rights en record rules. Groepen bepalen wie tot welke rol behoort. Access rights bepalen modelniveau: lezen, schrijven, maken, verwijderen. Record rules filteren welke individuele records zichtbaar of bewerkbaar zijn.
Veel “random” toegangsproblemen zijn eigenlijk record rules die correct maar onverwacht filteren.
Access rights: mag deze groep dit model gebruiken?
Access rights zitten op modelniveau. Een gebruiker kan bijvoorbeeld verkooporders mogen lezen maar niet verwijderen. Zonder read access op een model ziet de gebruiker het model in principe niet bruikbaar.
Access rights zijn breed. Ze zeggen niets over welke specifieke verkooporders iemand mag zien. Daarvoor zijn record rules nodig.
Record rules: welke records blijven over?
Record rules voegen domains toe op records. Denk aan “alleen eigen documenten”, “alleen eigen bedrijf” of “alleen records van mijn team”. Meerdere rules kunnen samen een complex resultaat geven.
Daarom kan admin alles zien terwijl een gewone gebruiker niets vindt. Dat betekent niet dat de data weg is, maar dat de domain voor die gebruiker niets doorlaat.
Multi-company maakt het gevoeliger
In multi-company omgevingen speelt company_id vaak mee in rules, context en property fields. Een gebruiker met verkeerde allowed companies ziet soms producten, partners of documenten niet zoals verwacht.
Controleer altijd actieve bedrijven, record company_id en eventuele company_dependent velden.
Debug-aanpak
- Reproduceer met de echte gebruiker, niet alleen als admin.
- Controleer groepen van de gebruiker.
- Controleer ir.model.access voor het model.
- Zoek actieve record rules op het model.
- Test domains in Odoo shell met user-context.
- Let op sudo(): het kan securityproblemen maskeren in plaats van oplossen.
Conclusie
Odoo-rechten zijn logisch zodra je de lagen apart bekijkt. Begin bij groepen en access rights, eindig bij record rules en user-context. Dan verdwijnt veel “random” gedrag.