Skip to main content

PERMISOS

Los permisos de acceso en Odoo controlan qué usuarios pueden leer, crear, modificar o eliminar registros de cada modelo.
Se definen en un archivo CSV llamado:

security/ir.model.access.csv


1. ¿Qué son los permisos de acceso?

Los permisos de acceso permiten restringir o conceder operaciones a diferentes grupos de usuarios sobre los modelos de la base de datos.
Cada permiso especifica cuatro acciones posibles:

  • Leer (perm_read) → permite visualizar los registros.\
  • Escribir (perm_write) → permite modificar los registros existentes.\
  • Crear (perm_create) → permite añadir nuevos registros.\
  • Eliminar (perm_unlink) → permite borrar registros.

2. Estructura del archivo CSV

El archivo ir.model.access.csv tiene una estructura fija con los siguientes campos:

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
CampoDescripción
idIdentificador único del permiso dentro del módulo.
nameNombre descriptivo del permiso.
model_id:idIdentificador técnico del modelo (definido en el sistema).
group_id:idGrupo de usuarios al que se aplican los permisos. Si se deja vacío, aplica a todos los usuarios.
perm_read1 si el grupo puede leer los registros, 0 si no.
perm_write1 si el grupo puede modificar registros, 0 si no.
perm_create1 si el grupo puede crear nuevos registros, 0 si no.
perm_unlink1 si el grupo puede eliminar registros, 0 si no.

3. Ejemplo básico

Este ejemplo define permisos para tres modelos: Departamento, Empleado y Proyecto.

Archivo: security/ir.model.access.csv

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_departamento,erciapps.departamento,model_erciapps_departamento,base.group_user,1,1,1,1
access_empleado,erciapps.empleado,model_erciapps_empleado,base.group_user,1,1,1,1
access_proyecto,erciapps.proyecto,model_erciapps_proyecto,base.group_user,1,1,1,1

Explicación: - Cada línea define un permiso de acceso para un modelo.\

  • El grupo base.group_user representa a los usuarios internos (empleados, usuarios registrados).\
  • Todos tienen permiso completo (leer, crear, escribir y eliminar).

4. Ubicación dentro del módulo

El archivo debe estar en la carpeta security/ de tu módulo:

    erciapps/
├── __manifest__.py
├── models/
│ ├── __init__.py
│ └── *.py
├── views/
│ └── *.xml
├── security/
│ └── ir.model.access.csv

Y debe estar referenciado en el archivo __manifest__.py:

'data': [
'security/ir.model.access.csv',
'views/vistas.xml',
],

5. Cómo funciona internamente

Cuando Odoo instala el módulo:

  1. Lee el archivo ir.model.access.csv.\
  2. Registra cada línea como un registro en el modelo ir.model.access.\
  3. Asocia esos permisos con los grupos de usuarios (res.groups).\
  4. Al ejecutar cualquier acción (ver, guardar, eliminar), Odoo comprueba los permisos definidos.

Si un usuario no pertenece a un grupo con permisos suficientes, se mostrará un error de acceso.


6. Ejemplo avanzado

Podemos definir permisos diferentes según el tipo de usuario.

Permisos solo para administradores

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_proyecto_admin,erciapps.proyecto,model_erciapps_proyecto,base.group_system,1,1,1,1

En este caso, solo los administradores del sistema (base.group_system) podrán leer, crear, modificar o eliminar proyectos.

Permisos de solo lectura

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_empleado_read,erciapps.empleado,model_erciapps_empleado,base.group_user,1,0,0,0

Este grupo podrá ver los empleados, pero no modificarlos, crearlos ni eliminarlos.


7. Buenas prácticas

  • Cada modelo debe tener al menos un registro en ir.model.access.csv.\
  • No otorgues permisos de eliminación (perm_unlink) a datos críticos.\
  • Define permisos distintos para usuarios normales y administradores.\
  • Usa nombres (id) descriptivos y únicos (por ejemplo: access_<modelo>_<grupo>).\
  • Mantén el archivo ordenado y con cabecera en la primera línea.

8. Resumen visual

Usuario → Grupo → Permisos (Access Rules) → Modelos → Base de datos

Es decir:\

  • Los usuarios pertenecen a grupos.\
  • Los grupos tienen permisos definidos en el archivo CSV.\
  • Odoo usa esos permisos para controlar qué operaciones puede realizar cada usuario sobre los modelos.

9. Plantilla base para nuevos módulos

Puedes copiar y adaptar este ejemplo:

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_<modelo>,<nombre_visible>,model_<nombre_tecnico>,base.group_user,1,0,0,0

Ejemplo práctico:

access_cliente,modulo_ventas.cliente,model_modulo_ventas_cliente,base.group_user,1,1,1,0