|
|
Overview Enforcement Features Coverage Screenshots FAQ Request Demo |
Restrict Any Menu, Field or Record Without Code
One rule screen for Odoo access rights, user permissions and role based security, instead of hand-editing record rules, groups and XML views
Smart Access Controller gives Odoo 19 administrators complete user access control from a single interface. Hide menus, fields, buttons, tabs, views, reports and chatter; block create, edit, delete, import and export; restrict records with domain based access; and strip groups from a user, all without writing a line of Python or XML. Every restriction is applied server-side through the ORM, so it holds even if someone bypasses the interface.
Where Native Odoo Access Rights Fall Short
Odoo's built-in security model is powerful but coarse. It works at model level through groups and record rules, and anything finer normally means a developer. These are the gaps Smart Access Controller closes.
One field needs a developer
Native Odoo has no UI for field level security. Making a single field read-only for one user means a custom module and a view inheritance.
Settings scattered everywhere
Groups, access rights, record rules and view attributes all live in different places, so nobody can answer "what can this user actually do?"
Hidden isn't blocked
Many access apps only hide buttons with CSS. The underlying operation still works, so the restriction is cosmetic rather than a real control.
Data walks out through Export
Any user who can read a list can usually export the whole thing to Excel, which is rarely what the business intended.
Multi-company blurs the lines
The same person often needs different permissions in different companies, and native groups apply globally to the user.
The fix: one rule, seven controls
One Access Rule record per group of users, seven tabs covering every dimension of Odoo access management, and enforcement that runs in the ORM rather than the browser.
Every Layer of Odoo Access Control
Create an Access Rule, pick the users it applies to, optionally scope it to specific companies, then configure what those users can see and do. Rules take effect immediately: the registry cache is cleared automatically on every save.
Menus and Models
Hide any menu or submenu, and control create, edit, delete, archive, duplicate, import, export, reports and actions for each model.
Fields, Buttons, Tabs
Make individual fields invisible, read-only or required; hide action buttons, smart buttons, kanban buttons and notebook tabs.
Record-Level Rules
Write an Odoo domain and restrict read, create, edit or delete on just the records that match it: record rules without the XML.
User-Level Controls
Global read-only mode, hide chatter, disable developer mode, disable login, and remove security groups from specific users.
How a Rule Works, in Six Steps
No coding, no server restart, no module upgrade. Configure it in the interface and it applies on the user's next page load.
Three Layers of Enforcement
This is the single most important thing to understand when comparing Odoo access control apps. Hiding a button in the browser is not a security control. The operation still exists. Smart Access Controller applies every restriction at three levels, and the deepest one runs inside Odoo's ORM where it cannot be bypassed from the client.
ORM Operation Blocking
Create, write and unlink are intercepted on Odoo's base model. A restricted user attempting a blocked operation receives an Access Error, regardless of whether the request came from the interface, an automated action, or a direct RPC call. Domain restrictions are evaluated here too, against the actual records being touched.
Per-User View Rewriting
The view architecture itself is rewritten before it reaches the browser: create/edit/delete/duplicate flags stripped from form, list and kanban views; fields marked invisible, readonly or required; buttons and notebook tabs removed; chatter deleted from the DOM tree. The user never receives markup they are not entitled to.
Client-Side Polish
Form, list and kanban controllers are extended so the remaining chrome behaves correctly: export, import, archive, duplicate, spreadsheet and Add Property controls are suppressed cleanly instead of throwing errors when clicked. This layer is about a tidy experience, not about security.
Seven Controls, One Interface
Each tab on the Access Rule form handles one dimension of Odoo user permissions. Use one, use all seven: they combine into a single effective policy for the assigned users.
Tab 1: Menus and Submenus
Hide Any Menu or Submenu
Pick any menu item in the system and it disappears for the assigned users. The full menu path is displayed so you always know which one you selected. Menu filtering happens in Odoo's own visible-menu resolution, so hidden menus are never sent to the browser at all.
Clean Navigation Per Role
Rather than confronting a warehouse operator with the full Odoo menu tree, show them only what their job needs. Fewer wrong turns, fewer support tickets, faster onboarding.
Tab 2: Model Access Rights
Block Create, Edit and Delete
Block Create, Edit and Delete per model. Enforced in the ORM, so the restriction survives any route into the record.
Restrict Import and Export
Restrict Export and Import per model to stop bulk data leaving through the spreadsheet download.
Archive, Duplicate, Reports
Hide Archive, Duplicate, Reports and the Actions menu so users can't print, clone or bulk-process what they shouldn't.
Read-Only Per Model
Combine hide create, edit and delete on a single model to make it view-only for a role, while leaving the rest of Odoo fully editable.
Hide Entire Views
Switch off the List, Form, Kanban or Pivot view individually per model, so a role only ever opens the view types it is meant to use.
Tab 3: Field Level Security
Make a Field Invisible
Remove a field from both form and list views. Cost price, margin and salary fields disappear entirely for the selected users.
Make a Field Read-Only
Show the value but block edits. Ideal for prices, credit limits and approval flags that staff need to see but not change.
Make a Field Required
Force a field to be filled for specific users, enforcing data-quality rules on the teams that need them without changing the model.
Block Relational Navigation
Strip the open and quick-create icons from relational fields so users can't navigate sideways into records they shouldn't reach.
Tab 4: Domain Based Access
Record Rules, No XML
Enter a standard Odoo domain and restrict Edit or Delete on the records that match it. The domain is evaluated safely with access to the current user, company and company list, so expressions like "only records I own" or "only this company's data" work out of the box.
Enforced Against Real Records
On edit and delete, the records being modified are matched against the domain at the moment of the operation. If they match a restricted domain, the write is refused with a clear Access Error rather than silently succeeding.
Tab 5: Buttons and Tabs
Workflow Buttons
Hide Confirm, Validate, Cancel, Approve or any other workflow button by its technical name.
Smart Buttons
Remove the statistic buttons at the top of a form that link through to related records.
Notebook Tabs
Hide an entire tab (Accounting, Invoicing, Purchase or any custom page) by name or label.
Kanban Card Buttons
Suppress buttons that appear on kanban cards, with an optional readable label for your own documentation.
Tabs 6 and 7: Chatter and Groups
Hide Chatter Per Model
Remove the whole chatter panel on chosen models, or keep it and hide only Send Message, Log Note or Schedule Activity.
Or Apply Globally
The same four chatter controls are also available as global toggles that apply everywhere for the assigned users.
Strip Security Groups
Remove specific groups from a user without editing their profile. This is useful when a group is inherited through another and you need to claw it back.
No Restart Needed
Group changes are applied through Odoo's cached group resolution, so the user's effective permissions update without a manual cache clear.
Global User Restrictions
Read Only User
One checkbox makes a user read-only across the entire system. Create, edit and delete are blocked everywhere, in the ORM.
Disable Developer Mode
Stop selected users from switching on developer tools and inspecting or altering technical settings.
Disable Login
Block sign-in entirely at the authentication layer while keeping the user record intact. This is ideal for leavers and suspended accounts.
System-Wide UI Toggles
Hide Export, Import, Archive, Duplicate, Spreadsheet and Add a Property across every screen in one click each.
What You Can Restrict, and Where
No vague "full access control" claim. Here is precisely which element each control applies to, the scope it operates at, and which enforcement layer backs it.
| Element | Available controls | Scope | Enforced at |
|---|---|---|---|
| Menus & submenus | Hide | Per menu | Server |
| Models (CRUD) | Block create, edit, delete | Per model | ORM + view |
| Views | Hide list, form, kanban or pivot view | Per model + view type | View |
| Data movement | Hide export (list views), hide import | Per model + global | View / UI |
| Record operations | Hide duplicate (view); archive, reports, actions (UI) | Per model + global | View / UI |
| Fields | Invisible, read-only, required, remove external link | Per model + field | View |
| Records (domain) | Restrict edit and delete by domain | Per model | ORM |
| Buttons & tabs | Hide action, smart, kanban buttons and notebook tabs | Per model + element | Server |
| Chatter | Hide chatter, send message, log note, activity | Per model + global | Server + UI |
| Security groups | Remove group from user | Per group | Server |
| Whole system | Read-only user (ORM); disable developer mode (UI) | Per user | ORM / UI |
| Authentication | Disable login | Per user | Login layer |
Controls marked ORM are enforced inside Odoo’s data layer and cannot be bypassed from the browser. Controls marked View are stripped from the view architecture on the server before it is sent. Note that a field marked invisible is removed from the interface, but its value may still be present in the underlying data response, so treat field hiding as presentation control rather than data secrecy. Controls marked UI are applied in the browser and are best treated as guard rails against accidental use rather than as security boundaries.
Safe to Install on Production
You Cannot Lock Yourself Out
Users in the Settings administrator group are exempt from every restriction at every layer. On top of that, the module's own configuration models are permanently excluded from restriction, so no rule can ever hide the tool you'd use to undo it.
Reversible in One Click
Every rule has an Active toggle. Switch it off and the restrictions lift immediately: no uninstall, no data loss, no cleanup. Test a policy on one user, then widen it once you're satisfied.
No Core Modifications
The module extends Odoo through standard inheritance and depends only on base, mail and web. Nothing in Odoo core is patched, so upgrades and other third-party apps are unaffected.
Common Requests, One Rule Each
Each of these is one Access Rule. No development ticket, no custom module.
"Sales shouldn't see cost price"
Field Access → product.template → standard_price → Invisible. Gone from form and list for that team only.
"Auditors look, not touch"
Tick Read Only User. The whole database becomes view-only for them, enforced in the ORM.
"No exporting the customer list"
Tick Hide Export globally, or restrict it on res.partner only. Bulk download disappears.
"Suspend this account today"
Tick Disable Login. Sign-in is refused at the authentication layer while the user record and its history stay intact.
"Reps edit only their own leads"
Domain Access → crm.lead → a domain matching records they don't own → Restrict Edit and Delete.
"No internal notes on HR records"
Chatter Access → hr.employee → Hide Log Note, or hide the chatter panel on that model entirely.
Screenshots From Odoo 19
A full walk through Access Studio in Odoo 19: set up a rule, configure the control tabs, then see the real effect on a restricted user's screen, including the server-side Access Error, the export audit log and the effective-access preview.
.png?4009d7e)
.png?4009d7e)
.png?4009d7e)
.png?4009d7e)
.png?4009d7e)
.png?4009d7e)
.png?4009d7e)
.png?4009d7e)
.png?4009d7e)
.png?4009d7e)
.png?4009d7e)
.png?4009d7e)
.png?4009d7e)





How It Compares to Native Odoo
| Capability | Native Odoo | Smart Access Controller |
|---|---|---|
| Model access rights | Yes, via groups & CSV | Yes, per user, from the interface |
| Field level security | Requires a custom module | Invisible / read-only / required, no code |
| Hide menus, buttons, tabs | View inheritance in XML | Point and click, per user |
| Record level security | Record rules, written in XML | Domain builder in the rule form |
| Global read-only user | Not available | One checkbox, ORM-enforced |
| Server-side enforcement | Yes, for what it covers | Yes, in the ORM, not just CSS hiding |
| Multi-company scoping | Groups apply globally to the user | Each rule scoped to chosen companies |
| Change history | No trail on permission changes | Chatter tracking on every rule |
| Price | Included, but developer time isn't | $49.99 one-time, open source licence |
Native Odoo comparison reflects standard Community and Enterprise behaviour in version 19. Other third-party apps vary; we encourage you to check whether any access module you evaluate enforces restrictions in the ORM or only hides them in the browser.
Who Changed What, and When
Access rules are full Odoo documents with chatter and activities attached, so permission changes leave the same evidence trail as any other business record.
What's Tracked
Each change is written to the rule's message history with the author and timestamp, useful evidence when an auditor asks who granted a permission and when.
Find Policies Fast
Built-in search filters let you answer questions like "which users are currently read-only?" or "who has login disabled?" without opening every rule. List, kanban and search views are all provided.
The Odoo user form also gains an Access Rules tab showing every rule currently applied to that person, the fastest way to answer "why can't this user do X?"
Who Can Configure Access Rules
The tool that controls permissions has its own permission model. Access rules can only be created and edited by an explicitly authorised group.
| Role | What they can do |
|---|---|
| Access Studio / Manager | Full read, write, create and delete on access rules and all seven rule line types. The privilege appears on the Access Rights tab of the user form, alongside Odoo's own application permissions. |
| Settings administrator | Exempt from every restriction at every enforcement layer. This is deliberate and is what makes the module safe to deploy: there is always a route back. |
| Everyone else | No visibility of the configuration at all. Standard users cannot see, read or modify the rules that govern them. |
| Multi-company scoping | Each rule can be limited to specific companies, so the same user can hold different permissions in different companies. Leave the field blank and the rule applies everywhere. |
The module's own configuration models are permanently excluded from restriction, so no access rule can be used to hide the access rules.
Technical Architecture
Standard Odoo model inheritance on base, ir.ui.menu, ir.model.fields and res.users. No core files are patched.
One rule header plus seven line models: menu, model, field, domain, button, chatter and group access.
The registry cache is cleared automatically whenever a rule is created, edited or deleted, so changes apply without a restart.
Domains are parsed with Odoo's safe evaluator, with the current user, company and company list available as context.
Two authenticated endpoints expose the effective configuration for the current user, used by the interface layer and available for your own extensions.
Distributed under LGPL-3. You can read the source, audit the enforcement logic yourself, and extend it for your own needs.
Because the licence is LGPL-3, nothing about the security model is hidden from you. If access control matters enough to buy a module for it, you should be able to verify how that module enforces it, and here you can.
Odoo 19 Compatibility
| Odoo version | 19.0 |
| Community & Enterprise | Both supported |
| Odoo.sh / On-premise | Yes |
| Odoo Online (SaaS) | Not supported: the module contains Python code, which Odoo Online does not permit |
| Required Odoo apps | Base, Discuss (mail) and Web, all present in every Odoo installation |
| External services | None. Nothing leaves your database and no API keys are required |
| Licence | LGPL-3 |
| Recurring fees | None. One-time purchase, no per-user or per-rule charge |
Why Odoo Admins Choose It
Complete Odoo access management, enforced in the ORM, configured without code, and priced so you don't have to justify it to finance.
Restrictions That Hold
Create, edit and delete are blocked in Odoo's data layer, not hidden with a stylesheet. That is the difference between a control and a suggestion.
Seven Dimensions, One Screen
Menus, models, fields, records, buttons, chatter and groups: every layer of Odoo user permissions in a single rule you can read at a glance.
Open, Auditable, Reversible
LGPL-3 source you can inspect, chatter tracking on every change, and an Active toggle that lifts any policy instantly.
Trusted by Odoo Administrators
[SDLC: replace with genuine, verifiable reviews only, never invented quotes. Until you have them, delete this section entirely rather than shipping placeholders; empty star ratings damage credibility more than an absent section does.]
[Genuine customer quote]
[Genuine customer quote]
[Genuine customer quote]
Docs, Demo and Live Test
Documentation
Scope, Setup and Support
What's Included
Menu hiding; per-model create / edit / delete / archive / duplicate / import / export / report / action control; list, form, kanban and pivot view hiding; field invisible / read-only / required / remove external link; domain based read, create, edit and delete restrictions; action, smart, kanban button and notebook tab hiding; per-model and global chatter control; security group removal; global read-only user; disable developer mode; disable login; hide export, import, archive, duplicate, spreadsheet and Add a Property; multi-company rule scoping; chatter tracking on every rule; and an Access Rules tab on the user form.
What's Not Included
View-type hiding (list, form, kanban, pivot) is present in the configuration screen but is not yet enforced. Treat it as a roadmap item. Domain restrictions currently cover Edit and Delete; Read and Create limits are not yet applied. There is no password expiry, login history report, permission simulation, bulk rule import/export or AI recommendation engine in this version. Search filter and group-by hiding, and graph, calendar and gantt view hiding, are not currently covered. Policy design workshops, migration of existing custom access modules, bespoke restriction types and team training are available as separate SDLC Corp services. Tell us your requirement and we will scope it.
Frequently Asked Questions
How do I manage user permissions in Odoo without coding?
Create an Access Rule, assign the users, and configure restrictions across seven tabs. Everything that would normally need a custom module (hiding fields, buttons, tabs and menus) is done through the interface.
What is the difference between access rights and record rules in Odoo?
Access rights decide which models a user can read or write; record rules decide which records within those models. This module covers both: Model Access for the first, Domain Access for the second.
Are restrictions really enforced, or just hidden in the browser?
Both, and the coverage table above says which is which. Create, edit and delete (including read-only user and domain-based edit/delete limits) are intercepted in Odoo’s ORM and raise an Access Error however the request arrives. Menu, field, button and tab hiding is applied to the view on the server. A smaller set of conveniences (archive, reports, actions, spreadsheet, developer mode) is applied in the browser only. We publish the distinction rather than claiming everything is equally enforced.
Can I accidentally lock myself out of Odoo?
No. Settings administrators are exempt from every restriction, and the module's own models can never be restricted. Any rule can also be switched off with the Active toggle.
How do I give a user read only access in Odoo?
Tick Read Only User on the rule. Create, edit and delete are blocked system-wide for the assigned users, enforced in the ORM rather than by hiding buttons.
Does it work with multi-company Odoo databases?
Yes. Each rule can be scoped to selected companies, so one person can hold different permissions in different companies. Leave the company field empty and the rule applies everywhere.
How do I stop users exporting data from Odoo?
Use the global Hide Export toggle to remove it everywhere, or restrict export on individual models through Model Access when only certain data is sensitive.
Can I see which rules apply to a specific user?
Yes. The Odoo user form gains an Access Rules tab listing every rule currently applied to that person, the quickest way to diagnose why someone cannot do something.
Do permission changes leave an audit trail?
Yes. Access rules carry Odoo's chatter, and key fields are tracked, so every change is recorded with its author and timestamp on the rule itself.
Which Odoo versions and editions are supported?
Odoo 19.0, Community and Enterprise, on Odoo.sh or on-premise. Odoo Online is not supported because it does not allow modules containing Python code.
Will it conflict with my other Odoo modules?
It uses standard inheritance and depends only on base, mail and web, so it applies to any model in any app, including your custom ones, without patching Odoo core.
Is it a subscription?
No. One-time purchase, no per-user or per-rule fees, and no external services to pay for. The module is distributed under the LGPL-3 open source licence.
Popular searches
More Odoo Apps From SDLC Corp
The banners below are the ones already bundled in your module folder. IP Restriction is the strongest pairing: access rules control what a user can do, while IP restriction controls where they can do it from.
Install, Create a Rule, Done
No configuration wizard, no external services, no API keys. Install the module, open Access Management, and your first rule can be live in under five minutes.
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 1675 |
| Technical Name |
sdlc_smart_access_controller |
| License | OPL-1 |
| Website | https://sdlccorp.com/ |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.



Please log in to comment on this module