Skip to main content
Multi-Company Access Rights — A build-to-order Odoo security layer that gives multi-company users different access rights, me — 1/1Illustrative preview

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.

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

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
ORM-level enforcement (`create`/`write`/`read` overrides honoring `self.env.companies`) so the boundary holds for UI, XML-RPC, and JSON-RPC alike
Compute fields with `@api.depends` deriving the user's effective profile for the active company context
Optional read-only vs read-write role split per company for the same shared user (e.g. manager in HQ, reviewer in a subsidiary)
Automated/server actions to reassign or lock profiles when a user's company assignment changes
Configurable field-level restrictions on sensitive fields (cost, margin, salary) scoped per company
Audit-friendly design: the per-company rule set is inspectable and exportable to hand an auditor a clear access boundary
Python unit tests covering each enforcement path so the boundary survives future Odoo upgrades
Compatibility handling for Community vs Enterprise editions, wiring Enterprise-only apps only where your edition includes them
Built and validated for Odoo 17.0, 18.0, and 19.0 with a clean `__manifest__.py` and versioned dependencies
Admin configuration screen (OWL/XML views) to assign profiles per user per company without touching code

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 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

CriterionECOSIRECustom BuildCompetitorOdoo Native
Per-company rights for one shared userCore capability — profile mapped per user per companyAchievable but you design the model yourselfUsually one global role, limited per-company nuanceNot supported — groups are global across companies
Enforcement layerORM-level `ir.rule` + access CSV, honored by UI and APIDepends on how you build itOften UI-focused, may leak via APIRecord rules exist but not per-company profiles
Menu & action isolation per companyGroup-conditional menus/actions tailored to your entitiesPossible with in-house effortPartial, generic togglesMenus are the same regardless of active company
Fit to your org structureBuilt from your actual company tree and role matrixFully bespoke but you own the whole buildGeneric; you bend your setup to fit itGeneric multi-company defaults only
Audit / segregation of duties evidenceExportable access matrix and documented rule mapOnly if you build reporting for itRarely providedNo per-company access boundary to show
Upgrade safety across 17/18/19Unit-tested enforcement; migration quoted per releaseYou maintain and re-test each upgradeDepends on vendor's update cadenceNative, but the capability is absent to begin with
Support & accountabilityPost-go-live support window, single vendorInternal team owns all fixesVendor support varies, no scope ownershipCommunity/Enterprise support, feature not present
Time to running solutionone working week from confirmed scope, fixed quoteLonger — full design, build, and test cycleFast to install but may not fitImmediate, 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.

Request a quote

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

Request a Quotation

Tell us about your Multi-Company Access Rights requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.