Seguridad y Control de Accesos en Odoo
Odoo implementa un sistema de seguridad de doble capa que garantiza que los usuarios solo accedan a los modelos autorizados (permisos de tabla/modelo) y a los registros específicos que les corresponden (filtros a nivel de fila).
1. Grupos de Usuarios y Roles (res.groups) #
Los grupos representan roles funcionales dentro de la empresa (ej. Usuario de Ventas, Responsable de Almacén, Administrador General):
1<odoo> 2 <!-- Categoría de Módulo --> 3 <record id="module_category_library" model="ir.module.category"> 4 <field name="name">Biblioteca</field> 5 <field name="sequence">10</field> 6 </record> 7 8 <!-- Grupo: Usuario Lector --> 9 <record id="group_library_user" model="res.groups"> 10 <field name="name">Lector</field> 11 <field name="category_id" ref="module_category_library"/> 12 <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> 13 </record> 14 15 <!-- Grupo: Administrador de Biblioteca (Hereda permisos de Lector) --> 16 <record id="group_library_manager" model="res.groups"> 17 <field name="name">Administrador</field> 18 <field name="category_id" ref="module_category_library"/> 19 <field name="implied_ids" eval="[(4, ref('group_library_user'))]"/> 20 <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> 21 </record> 22</odoo>
2. Permisos de Modelo: Listas de Control de Acceso (ACL) #
Los permisos a nivel de modelo se configuran en el archivo obligatorio security/ir.model.access.csv:
1id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2access_library_book_user,library.book.user,model_library_book,group_library_user,1,0,0,0 3access_library_book_manager,library.book.manager,model_library_book,group_library_manager,1,1,1,1 4access_library_loan_user,library.loan.user,model_library_loan,group_library_user,1,1,1,0 5access_library_loan_manager,library.loan.manager,model_library_loan,group_library_manager,1,1,1,1
model_id:id: Identificador del modelo con prefijomodel_y puntos sustituidos por guiones bajos (ej.library.bookmodel_library_book).perm_read, perm_write, perm_create, perm_unlink:1(permitido) o0(denegado).
3. Reglas de Registro a Nivel de Fila (Record Rules - ir.rule) #
Las Record Rules filtran dinámicamente qué registros específicos puede ver o modificar un usuario aplicando un dominio de seguridad forzado:
1<record id="rule_library_book_user_branch" model="ir.rule"> 2 <field name="name">Libros: acceso por sucursal de la compañía</field> 3 <field name="model_id" ref="model_library_book"/> 4 <field name="domain_force">[('company_id', 'in', company_ids)]</field> 5 <field name="groups" eval="[(4, ref('group_library_user'))]"/> 6 <field name="perm_read" eval="True"/> 7 <field name="perm_write" eval="True"/> 8 <field name="perm_create" eval="True"/> 9 <field name="perm_unlink" eval="False"/> 10</record>
Resumen del tema
Conceptos clave #
- Grupos y Roles (
res.groups): entidades que agrupan usuarios para asignar privilegios jerárquicos o por departamento. - Listas de Control de Acceso (ACL -
ir.model.access.csv): permisos a nivel de modelo para las 4 operaciones CRUD (perm_read,perm_write,perm_create,perm_unlink). - Reglas de Registro (Record Rules -
ir.rule): filtros de dominio forzados (domain_force) que restringen a nivel de fila qué registros específicos puede consultar o editar un usuario (ej.[('create_uid', '=', user.id)]). - Doble Capa de Seguridad: para operar sobre un registro, el usuario debe tener permiso en el ACL del modelo y cumplir con el dominio de la Record Rule.
Qué debes recordar #
La seguridad en Odoo combina permisos de modelo (archivos CSV de ACL) con filtros a nivel de fila (Record Rules en XML) vinculados a grupos de usuarios (res.groups).