- Home
- Apps
- SaaS Tools
- Multi-Company Access Rights
Illustrative previewA build-to-order Odoo security layer that gives multi-company users different access rights,
menus, and record visibility per company they operate in.
ECOSIRE scopes, builds, installs, and supports it for your exact org structure.
What is Multi-Company Access Rights?
A build-to-order Odoo security layer that gives multi-company users different access rights, menus, and record visibility per company they operate in. ECOSIRE scopes, builds, installs, and supports it for your exact org structure. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Key Features
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your Odoo.
- 3
Go live + support
You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.
Technical Specifications
- Odoo Compatibility
- Odoo 17, Odoo 18, Odoo 19
- Editions
- Enterprise & Community
- License
- Licence confirmation required
- Python Requirement
- Python 3.10+
- Database
- PostgreSQL 12+
About this Product
Once a single Odoo database serves several legal entities, the native multi-company model shows its limits. Odoo lets a user belong to multiple companies and switch between them, but a user's security groups (groups_id) are global — a person who is Accounting Manager in the parent company carries that same manager profile into every subsidiary the moment they toggle the company selector. Record rules (ir.rule) filter which records are visible, but they do not cleanly grant a user Sales-Manager rights in Company A while pinning them to a read-only role in Company B. Finance and compliance leads discover this during audits: a shared controller can post journal entries in an entity they were only meant to review, and there is no per-company access boundary to show an auditor.
Multi-Company Access Rights closes that gap. We build a custom module that introduces a per-company access mapping — a model (models.Model) linking a user, a company, and a chosen security profile — and enforces it so that a user's effective permissions change with the active company context. Technically this is delivered through purpose-built security groups, ir.model.access.csv entries for model-level CRUD, and company-aware ir.rule record rules whose domains reference the active company and the user-company profile mapping. Where menus and actions must differ per entity, we drive visibility with group-conditional <menuitem groups="..."> and action bindings, so a user simply does not see the models, buttons, or reports they are not entitled to in the company they are currently in.
Under the hood we lean on Odoo's own primitives rather than fighting them. Compute fields with @api.depends derive the user's effective profile for the active company; overrides on the relevant models respect self.env.company and self.env.companies so that reads, writes, and create() all honor the per-company rule set. We add automated actions or server actions where a change of company must trigger a reassignment, and every enforcement path is covered by Python unit tests so the boundary holds after future upgrades. The same rules are honored by the XML-RPC/JSON-RPC API, because record rules apply at the ORM layer — an integration or a portal request cannot slip past the per-company profile the way a bolt-on UI check could. The design accounts for Community vs Enterprise differences (Enterprise-only apps such as full Accounting or Studio-generated models are wired in only when your edition includes them) and is delivered for Odoo 17.0, 18.0, or 19.0.
Because this is build-to-order, nothing ships until we have mapped your actual company tree and role matrix. Delivery starts with a short scoping call, followed by a written scope and fixed quote, development on a branch, UAT on a staging database with your real company structure, and a supervised go-live with a rollback plan. Typical delivery is one working week from confirmed scope, depending on the number of companies and the depth of role differences. Pricing starts from $999 (indicative, single-company base scope); the number of companies, the number of distinct per-company role profiles, cross-company sharing exceptions, and any Enterprise-app coverage increase the quoted scope. You receive the installable source, the git repository, and a documented rule map so your team — or ours — can maintain it.
What you get
- Installable source code for your Odoo version (17.0, 18.0, or 19.0), packaged as a proper addon with `__manifest__.py`
- Installation and configuration on your environment, including security groups, access CSV, and record rules wired to your company tree
- Technical documentation: model design, the per-company rule map, and how to extend profiles
- End-user guide plus a live training session for admins and security owners
- Post-go-live support window for defect fixes and adjustments
- UAT on a staging database with your real company structure, plus a documented rollback plan
- Git repository handover with full commit history and tagged release
- Configuration matrix mapping each user, company, and profile for audit reference
Who this is for
Group Finance Controller
Runs consolidated accounting across several legal entities in one Odoo database and needs shared staff to hold different rights per entity — manager in one company, reviewer in another — with a clean boundary an auditor can inspect.
ERP / Odoo Administrator
Maintains a multi-company database and is tired of global groups leaking rights across companies. Wants per-company profiles enforced at the ORM so UI, API, and portal access all obey the same rules, plus tests that survive upgrades.
Compliance / Internal Audit Lead
Needs demonstrable segregation of duties between entities: proof that a shared user cannot post, approve, or edit records in a company they are only meant to review, exportable as an access matrix.
Operations Director, multi-brand group
Oversees several trading companies sharing one system and wants each brand's team to see only their menus, products, and reports when working in that company, without maintaining separate databases.
How Multi-Company Access Rights Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Per-company rights for one shared user | Core capability — profile mapped per user per company | Achievable but you design the model yourself | Usually one global role, limited per-company nuance | Not supported — groups are global across companies |
| Enforcement layer | ORM-level `ir.rule` + access CSV, honored by UI and API | Depends on how you build it | Often UI-focused, may leak via API | Record rules exist but not per-company profiles |
| Menu & action isolation per company | Group-conditional menus/actions tailored to your entities | Possible with in-house effort | Partial, generic toggles | Menus are the same regardless of active company |
| Fit to your org structure | Built from your actual company tree and role matrix | Fully bespoke but you own the whole build | Generic; you bend your setup to fit it | Generic multi-company defaults only |
| Audit / segregation of duties evidence | Exportable access matrix and documented rule map | Only if you build reporting for it | Rarely provided | No per-company access boundary to show |
| Upgrade safety across 17/18/19 | Unit-tested enforcement; migration quoted per release | You maintain and re-test each upgrade | Depends on vendor's update cadence | Native, but the capability is absent to begin with |
| Support & accountability | Post-go-live support window, single vendor | Internal team owns all fixes | Vendor support varies, no scope ownership | Community/Enterprise support, feature not present |
| Time to running solution | one working week from confirmed scope, fixed quote | Longer — full design, build, and test cycle | Fast to install but may not fit | Immediate, but does not solve the problem |
Frequently Asked Questions about Multi-Company Access Rights
Is this an existing app I can download and install today?
No. This is a build-to-order module that ECOSIRE designs, builds, installs, and supports for your specific company structure. We start from your actual org chart and role matrix rather than shipping a generic package, so there is no instant download — you request a quotation and we build your version.
How long does delivery take?
Typical delivery is one working week from confirmed scope. The exact timeline depends on how many companies are involved and how different the per-company roles need to be. After the scoping call we give you a written scope and a target date before any development begins.
How does pricing and scoping work?
Pricing starts from $999 (indicative, single-company base scope). We hold a short scoping call, then send a fixed quote. Cost is driven by the number of companies, the number of distinct per-company role profiles, cross-company sharing exceptions, and any Enterprise-app coverage. You approve the fixed quote before work starts — no open-ended billing.
What about support and future Odoo updates?
Every build includes a post-go-live support window for defect fixes and adjustments. Because enforcement lives at the ORM layer and is covered by unit tests, the module is designed to survive version upgrades; when you move to a newer Odoo release (17.0 → 18.0 → 19.0) we can quote a migration and re-validation pass.
How is this different from Odoo's built-in multi-company feature?
Odoo's native multi-company lets a user belong to several companies but applies one global set of security groups everywhere. Our module maps a security profile per user per company, enforced through company-aware record rules and access controls, so the same person can hold different rights in each company they operate in.
Will the rules also apply to API and integration access?
Yes. Because the per-company profile is enforced with `ir.rule` record rules and access controls at the ORM level, the same boundaries apply to XML-RPC and JSON-RPC calls and to portal requests — an integration cannot bypass the per-company rules the way a UI-only check could.
Can we restrict specific sensitive fields per company?
Yes. Beyond model-level access, we can scope field-level restrictions (for example cost, margin, or salary fields) so they are hidden or read-only for a given profile in a given company, while remaining editable for authorized roles elsewhere.
Related Modules

M-PESA Express Payment Base for Odoo
A build-to-order base module that wires M-PESA Express (STK Push) into Odoo as a first-class payment provider for both e-commerce checkout and Point of Sale. ECOSIRE scopes, builds, installs, and supports it — this is not an off-the-shelf download.

M-Pesa Payment Gateway for Odoo (Daraja)
Accept M-Pesa STK Push and C2B mobile money on Odoo 17/18/19 with auto reconciliation — built, installed and supported by ECOSIRE.

Multi-Company Financial Consolidation
A build-to-order Odoo module that consolidates the financial statements of your legal entities into one group view with currency translation, inter-company eliminations, and minority-interest handling. ECOSIRE scopes, builds, installs, and supports it for Odoo 17, 18, or 19.

Multi-CRM Connector Hub
One Odoo connector to sync CRM leads, contacts & deals with HubSpot, Salesforce, Pipedrive, Zoho, Vtiger and Intercom.
Multi-Company Access Rights
A build-to-order Odoo security layer that gives multi-company users different access rights, menus, and record visibility per company they operate in. ECOSIRE scopes, builds, installs, and supports it for your exact org structure.
- Per-company access mapping model linking user, `res.company`, and a security profile, so effective rights change with the active company
- Company-aware `ir.rule` record rules whose domains reference `self.env.company` and the user-company profile mapping
- Purpose-built security groups plus `ir.model.access.csv` entries for precise model-level create/read/write/unlink control per profile
- Group-conditional menu and action visibility via `<menuitem groups="...">` so users never see models they are not entitled to in the current company