Email sales@vrajatechnologies.com Teams Teams Contact +91 9099928101 Whatsapp +91 73596 28466 Linkedin Linkdin
How to Implement Record Rules vs. Access Rights  in Odoo?

Understanding of Record Rules vs. Access Rights in Odoo

✅ What’s the Difference?

Feature
Access Rights
Record Rules
ScopeModel-level (create, read, write, delete)Record-level (row-level access control)
Where Definedir.model.access.csv or UI (Settings > Technical > Security > Access Controls)In UI (Settings > Technical > Security > Record Rules)
What It ControlsIf a user can access a modelWhich records the user can access
Enforced OnORM operationsORM filters & queries

📌 Real Use Case 1: Sales User should not delete Sale Orders

✅ Access Right Setup:

In ir.model.access.csv for model sale.order:

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink

sales_order_user,sales_order_user,model_sale_order,sales_team.group_sale_user,1,1,1,0

  • This allows reading, writing, creating Sale Orders, but prevents deleting.

📌 Real Use Case 2: User should only see their own customers

✅ Record Rule Setup:

Model: res.partner

 [(‘user_id’, ‘=’, user.id)]
  • Only allows users to view customers assigned to them.
  • This does not restrict the model access; it filters visible records.

🧪 Realistic Combined Scenario

Imagine you have a project.task model:

  • Access Right gives the user rights to read/write.
  • Record Rule restricts visibility to only tasks in projects where the user is a member.

Example Rule:

[(‘project_id.user_ids’, ‘in’, [user.id])]

This ensures that:

  • User can only view/write tasks where they are a project member.
  • Even with write access, they cannot modify tasks outside their scope.

✅ Summary Table

Feature
Access Rights
Record Rules
Setup Locationir.model.access.csv / UIUI (Record Rules)
GranularityCoarse (whole model)Fine (specific records)
Applies ToCRUD permissionsFiltering domain per user
Skipped WhenUsing sudo()Using sudo()
Enforced InORM methodsSearch, browse, write, etc.

⚠️ Best Practices

  • Always define both access rights and record rules.
  • Use record rules for dynamic record visibility.
  • Use access rights for controlling general actions like delete/write.