Skip to content
Odoo Migration

Odoo Migration: Handling Custom Security Rules and Record Access Policies

A practical guide for CIOs and ERP consultants on migrating custom security rules and record access policies in Odoo. Learn how to audit, map, test, and validate access controls to prevent data leakage and operational disruption during version upgrades.

9 min readSysGenPro Editorial
Odoo Migration: Handling Custom Security Rules and Record Access Policies

Direct Answer: Auditing and Mapping Security Rules is Critical for Safe Odoo Migration

When migrating or upgrading Odoo, custom security rules and record access policies do not always transfer automatically or remain functionally identical across versions. The recommended approach is to perform a comprehensive audit of all existing access controls, map them to the target version's schema, and validate them in a representative staging environment before cutover. This process is critical because security misconfigurations can lead to data leakage, unauthorized access, or operational paralysis where users cannot perform their daily tasks. The main risks to control include broken domain constraints, deprecated group references, and changes in how Odoo handles multi-tenant data segregation. By treating security migration as a distinct workstream with its own testing and validation criteria, you protect business data integrity and ensure that the new system enforces the same strict access controls as the legacy environment.

Understanding Odoo Security Architecture in Migration Context

Odoo security is built on two primary layers: Access Control Lists (ACLs) and Record Rules. ACLs, stored in the ir.model.access table, define which groups can create, read, write, or delete records for a specific model. Record Rules, stored in ir.rule, apply domain filters to restrict which records a user can see or modify, often based on user-specific fields like company_id or user_id. During a migration, the structure of these tables may change, or the behavior of specific fields used in domain constraints may be deprecated. For example, a rule relying on a field that is removed or renamed in the target version will fail silently or cause errors. Understanding this architecture is the first step in identifying which customizations are at risk. You must distinguish between standard Odoo security rules, which are typically updated by the core upgrade process, and custom rules defined in your own modules, which require manual review and potential code refactoring.

Phase 1: Preparation and Security Audit

Inventorying Custom Security Definitions

The preparation phase begins with a complete inventory of all security-related customizations. This includes scanning all custom modules for XML data files that define ir.model.access and ir.rule records. You should also check Python code for any dynamic security logic that might bypass standard ACLs. Create a detailed matrix that lists every model, every group, and every rule associated with your custom modules. For each entry, document the specific permissions granted and the domain constraints applied. This inventory serves as the baseline for comparison after the migration. It is essential to identify any rules that reference standard Odoo groups, as these group IDs may change or be restructured in the target version. If your custom rules depend on specific standard groups, you must verify the compatibility of those group references against the official Odoo documentation for the target version.

Assessing Version-Specific Changes

Before executing the migration, review the release notes and technical documentation for both the source and target Odoo versions. Look for changes in the security framework, such as modifications to how multi-company rules are handled or updates to the default access rights for core models. Some versions introduce new security features or deprecate older methods of defining access. For instance, if the target version changes the default behavior of the company_id field in record rules, your custom rules might need adjustment to maintain the same level of data segregation. This assessment helps you anticipate potential conflicts and plan for necessary code changes. It is crucial to verify these details against the vendor's official documentation, as compatibility and support for specific security features must be confirmed for the exact source and target versions you are using.

Phase 2: Technical Execution and Mapping

During the technical execution phase, you will migrate the database and apply the target version's core updates. However, custom security rules require careful handling. If your custom modules are compatible with the target version, their security definitions will be installed or updated during the module upgrade process. If not, you may need to manually adjust the XML files or Python code to align with the new schema. A key task is mapping old group IDs to new ones if the standard groups have been renamed or reorganized. You should use the Odoo ORM to query the database and identify any orphaned security rules that reference non-existent groups or models. This step ensures that no broken references remain in the system. Additionally, you must review any Python code that dynamically generates security rules or modifies access rights at runtime. This code must be tested to ensure it functions correctly with the new version's API and data structures.

Phase 3: Validation and Testing Strategy

Automated Security Testing

Validation is the most critical phase for security migration. You must implement automated tests that verify access rights for every user group and model combination. These tests should attempt to create, read, write, and delete records for each model and assert that the expected permissions are enforced. For record rules, the tests should verify that users can only see the records they are authorized to see, based on the domain constraints. For example, if a rule restricts access to records where company_id equals the user's company, the test should create records for multiple companies and verify that a user from Company A cannot see records from Company B. These tests should be run in a staging environment that mirrors the production data structure and user configuration. Using a representative dataset ensures that the tests cover realistic scenarios and edge cases.

Manual User Acceptance Testing

In addition to automated tests, manual User Acceptance Testing (UAT) is essential. Select a group of key users from different departments and roles to test their access to the system. They should perform their daily tasks and report any issues with visibility or permissions. This human-in-the-loop approach helps identify subtle issues that automated tests might miss, such as UI elements that are hidden due to access restrictions or workflows that are blocked by security rules. Document all findings and triage them based on severity. Critical security issues, such as unauthorized access to sensitive data, must be resolved before cutover. Minor issues, such as a user not seeing a non-critical field, can be addressed post-migration if they do not impact business operations.

Risk Management and Mitigation Strategies

RiskImpactMitigation Strategy
Broken Domain ConstraintsUsers see incorrect data or no dataReview all ir.rule domains; test with multi-company data
Deprecated Group ReferencesSecurity rules fail to applyMap old groups to new; verify group IDs in target version
Missing ACL EntriesUsers cannot access core modelsAudit ir.model.access; ensure all custom models have ACLs
Performance DegradationSlow queries due to complex rulesOptimize domain constraints; index relevant fields
Data LeakageUnauthorized access to sensitive dataImplement strict UAT; monitor logs for anomalies

Security migration carries significant risks if not handled carefully. One major risk is data leakage, where users gain access to records they should not see due to broken record rules. Another risk is operational disruption, where users lose access to critical data or functions due to missing ACLs or incorrect group mappings. To mitigate these risks, you must implement a robust testing strategy that covers both automated and manual scenarios. Additionally, you should monitor the system closely after cutover for any anomalies in access patterns or error logs. Having a rollback plan is also essential. If critical security issues are discovered post-migration, you should be able to revert to the previous version or restore a backup to maintain business continuity. This requires that you have verified backups and a tested restore procedure in place before the migration begins.

Deployment and Cutover Planning

The deployment phase involves moving the validated configuration to the production environment. This should be done during a planned maintenance window to minimize downtime. Before cutover, ensure that all security tests have passed and that any critical issues have been resolved. Create a detailed runbook that outlines the steps for the migration, including database backup, module upgrade, security rule validation, and user communication. The runbook should also include go/no-go criteria, such as the successful completion of all automated security tests and sign-off from key stakeholders. During cutover, monitor the system in real-time for any errors or performance issues. If critical problems arise, trigger the rollback plan immediately. Post-cutover, provide support to users and monitor the system for any lingering issues. This stabilization period is crucial for ensuring that the migration is successful and that the system operates as expected.

Post-Migration Stabilization and Monitoring

After the migration is complete, the focus shifts to stabilization and monitoring. You should continue to monitor the system for any security-related errors or anomalies in access patterns. Review the audit logs to ensure that all access is authorized and that no unauthorized attempts are being made. Provide training to users on any changes to their access rights or workflows. Collect feedback from users and address any issues promptly. This ongoing monitoring and support help ensure that the system remains secure and stable over time. Additionally, you should document any changes made to the security configuration during the migration and update your documentation accordingly. This documentation serves as a reference for future migrations or upgrades and helps maintain the integrity of the system.

Best Practices for Long-Term Security Maintenance

  • Regularly audit security rules and access rights to ensure they align with business needs.
  • Implement automated security tests in your CI/CD pipeline to catch issues early.
  • Keep your custom modules up-to-date with the latest Odoo version to ensure compatibility.
  • Monitor system logs for any anomalies in access patterns or errors.
  • Provide regular training to users on security best practices and access rights.

Maintaining security in Odoo is an ongoing process, not a one-time task. By implementing best practices for long-term security maintenance, you can ensure that your system remains secure and compliant over time. This includes regular audits, automated testing, and user training. By taking a proactive approach to security, you can reduce the risk of data breaches and operational disruptions, and ensure that your ERP system continues to support your business effectively.

Written by
SysGenPro Editorial

SysGenPro Editorial

Platform & solutions team

Practical guidance on ERP, AI automation, cloud deployment and enterprise transformation from the SysGenPro team.

Share this article

Frequently asked questions

Common questions on this topic. Talk to our team for anything specific to your business.

01What happens to custom security rules during an Odoo version upgrade?

Custom security rules defined in your modules are typically preserved if the module is compatible with the target version. However, if the underlying schema or group IDs change, the rules may break. You must audit and test these rules in a staging environment to ensure they function correctly after the upgrade.

02How do I test record access policies in a staging environment?

Use automated tests to verify that users can only access the records they are authorized to see. Create test data for multiple companies or users and assert that the domain constraints in your record rules are enforced correctly. Also, perform manual UAT with key users to validate real-world scenarios.

03Can Odoo automatically migrate all custom access rights?

No, Odoo does not automatically migrate all custom access rights. While standard security rules are updated by the core upgrade process, custom rules defined in your modules require manual review and potential code refactoring to ensure compatibility with the target version.

04What are the risks of missing security rules in Odoo migration?

Missing security rules can lead to data leakage, where users gain unauthorized access to sensitive data, or operational disruption, where users lose access to critical functions. These risks can have significant business and compliance implications.

05How do I map old Odoo groups to new version groups?

Review the release notes and technical documentation for the target version to identify any changes in group IDs or names. Use the Odoo ORM to query the database and map old group IDs to new ones. Update your custom security rules to reference the new group IDs.

06What tools are used to audit Odoo security configurations?

You can use the Odoo ORM to query the ir.model.access and ir.rule tables to audit security configurations. Additionally, you can use third-party tools or custom scripts to generate reports on access rights and record rules. Automated testing frameworks can also be used to validate security configurations.

Continue learning
View all articles
Explore the platform

Where to go next

Browse the knowledge hub

See how SysGenPro fits your business

Discuss your workflows, modules and deployment options with our team.

Back to resources