The moment you see AccessError
You open Odoo and try to view a sales order, invoice, or product. Instead of the record, you get a red banner with:
AccessError
The requested operation cannot be completed due to record rules or access rights
This stops your daily work. A salesperson can’t check a customer order. An accountant can’t approve an invoice. The error message is vague, but it always points to one of two things: user rights or record rules.
Below is a clear path to find which one is blocking you and how to unblock it fast.
What AccessError really means
AccessError is Odoo’s way of saying: “This user is not allowed to see or edit this record.” It comes up in two common situations:
- User rights issue: The user lacks the basic permission to access the model (e.g., Sales / User: Sales / User).
- Record rule conflict: The user has the right model access, but a record rule filters out this specific record.
Think of it like a locked door with two keys:
- The first key is the user right (e.g., Sales Officer). Without it, the door is closed.
- The second key is the record rule (e.g., “Only see orders in your region”). Without the right key, the door is still closed even if you have the first key.
A common mix-up: users blame the module or the data, but the real issue is usually a recent rights or rule change in your Odoo setup.
Quick checks before you dig deeper
1. Confirm the error is AccessError
Refresh the page. If you still see the red banner with the exact text above, this is the right guide. If you see a different error (e.g., “Server Error” or “Missing field”), stop here and check integration logs instead.
2. Switch to an admin account
Log in as an administrator. If the record appears, the issue is definitely a rights or rule conflict for the original user. If it doesn’t appear even for the admin, the record may be deleted or archived.
3. Check if the user can see other records in the same model
Try opening a different sales order or invoice. If all records are missing, the problem is likely a model-level rule or missing user right. If only one record is missing, the issue is a record rule conflict on that specific record.
Diagnose: rights vs. record rules
Step 1: Check the user’s basic rights
Go to Settings → Users & Companies → Users, open the affected user, and check the Application Rights tab. Look for the relevant model (e.g., Sales / User). If the box is unchecked, this is the root cause. Tick the box, save, and test again.
Tip: If you’re unsure which model to check, look at the URL when you try to open the record. The model name is in the path (e.g., /web#action=...&model=sale.order).
Step 2: Check record rules
Go to Settings → Technical → Record Rules. Search for rules that apply to the model (e.g., sale.order).
For each rule, look at:
- Domain: The filter applied (e.g.,
[('region_id','=',user.region_id)]). - Groups: Which groups the rule applies to (e.g., Sales / User).
- Perms: Read, Write, Create, Unlink.
Example: A rule named “Sale orders / Region filter” with domain [('region_id','=',user.region_id)] will hide orders outside the user’s region. If the user’s region is empty, they see nothing.
Tip: If you’re not sure which rule is blocking, temporarily disable rules one by one (uncheck “Active”) and test after each change.
Fix the conflict
If the issue is a missing user right
- Go to Settings → Users & Companies → Users.
- Open the user record.
- Go to the Application Rights tab.
- Find the model (e.g., Sales / User) and check the box.
- Save and reload the page.
If the user is part of a group that should have the right, check the group’s rights instead: Settings → Users & Companies → Groups, open the group, and check the model rights there.
If the issue is a record rule conflict
- Go to Settings → Technical → Record Rules.
- Search for rules on the affected model (e.g.,
sale.order). - Identify the rule with the domain that is filtering out the record.
- Choose one of the following fixes:
- Adjust the domain: Modify the domain to include the record (e.g., add
|('region_id','=',False)to allow records without a region). - Add the user to the group: If the rule applies to a group the user isn’t in, add them to that group.
- Disable the rule: If the rule is no longer needed, uncheck “Active”.
- Override in a custom module: If the rule is from a third-party module, create a custom addon to override the rule’s domain.
- Adjust the domain: Modify the domain to include the record (e.g., add
- Save and reload the page.
Note: If you override a rule in a custom module, ensure the module is installed and updated. After updating, restart Odoo and update the app list.
Verify the fix and prevent future issues
Test the fix
Log in as the affected user and try to open the record again. If it appears, the fix worked. If not, go back to the diagnosis steps and check the next likely cause.
Document the change
Record what you changed (e.g., “Enabled Sales / User right for John Doe” or “Updated domain on rule ‘Sale orders / Region filter’”). This helps your team avoid reverting the fix later.
Automate checks for common pitfalls
- After any user or group change, run a quick test for each affected model.
- After installing or updating a module with new record rules, review the rules and test with a non-admin user.
- If you use Odoo Enterprise, check the Access Rights Assistant (Settings → Users & Companies → Access Rights Assistant) for a quick overview of rights and conflicts.
Tip: If the issue returns after a server restart or module update, the custom addon or module may be resetting the rule or right. Check the module’s security/ir.model.access.csv and security/record_rules.xml files for overrides.
When to seek help
Stop and escalate if any of the following occur:
- The error persists after you’ve checked user rights and disabled all relevant record rules.
- You see database errors or crashes when opening the user form or record rules list.
- The affected user is an administrator, but they still can’t see the record (possible data corruption).
- The issue appears only for users imported from an external system (possible data mapping error).
- You’re unsure which module introduced the conflicting rule or right.
At this point, gather the following details and contact your Odoo support or administrator:
- Odoo version (e.g., 16.0)
- Exact error message and screenshot
- User ID and model name
- List of active record rules on the model
- Any recent changes (module updates, user/group changes, data imports)
Decision guide: what to do first
Use this quick flowchart to decide your next step:
| Symptom | Action |
|---|---|
| User can’t see any records in the model | Check user rights first (Application Rights tab). If correct, check model-level record rules. |
| User can see some records but not one specific record | Check record rules and domains. The issue is likely a rule filtering out that record. |
| Error appears for an admin user | Check for data corruption or archived/deleted records. If not, escalate. |
| Issue started after a module update or data import | Review new record rules or rights added by the module or import. Disable or adjust as needed. |
| Issue returns after restart or update | Check for overrides in custom modules or resets in module upgrades. |
Start at the top of the table and follow the action column. Most AccessError cases are resolved in under 10 minutes by checking rights and disabling one rule.
Key takeaways and next step
AccessError in Odoo is almost always caused by one of two things: a missing user right or a record rule conflict. The fastest way to fix it is to:
- Confirm the error is AccessError and not another issue.
- Switch to an admin account to verify the record exists.
- Check the user’s basic rights on the model.
- Check record rules on the model and adjust or disable the conflicting rule.
- Test, document, and automate checks to prevent recurrence.\li>
Do this today: Pick one user who recently reported the issue. Follow the quick checks in this guide. If you find the cause, apply the fix and verify. If not, escalate with the details above.
Ignoring AccessError can block daily operations and lead to data inconsistencies. Fixing it now keeps your Odoo setup reliable and your team productive.
Practical Next Step
Check your user rights now
Discuss Your Odoo ScopeFAQ
Why does AccessError appear even when the user has the correct group?
Groups grant model-level access, but record rules can still filter out specific records. For example, a user may be in the Sales / User group (so they can open sales orders), but a rule may hide all orders outside their region. In this case, the user has the right to access the model, but no records are visible due to the rule.
How do I know if a record rule is active or not?
In Settings → Technical → Record Rules, look at the “Active” checkbox in the rule list. If unchecked, the rule is disabled and will not filter records. You can also filter the list by checking “Active” in the search panel to see only active rules.
Can I override a record rule from a third-party module?
Yes. Create a custom addon and override the rule’s domain in a Python file or XML record. For example, in models/res_users.py, you can extend the rule’s domain logic. After updating the module, restart Odoo and update the app list to apply the change.
What’s the difference between user rights and record rules in Odoo?
User rights control whether a user can access a model at all (e.g., Sales / User). Without the right, the user can’t open any record in that model. Record rules control which records the user can see within that model (e.g., only orders in their region). Even with the right, a rule can hide records.
Why does AccessError persist after I fix the rights and rules?
Common reasons include: the change wasn’t saved, the user’s session wasn’t refreshed, a custom module reset the rule or right on update, or the record is archived/deleted. Always test in a fresh session and check for module overrides or resets.