La seguridad en un ERP es un aspecto fundamental. Decidir quién tiene permitido el acceso a un documento determinado y quién lo tiene restringido es una opción básica en sistemas que, con mucha frecuencia, utilizan usuarios de diferente rango a los que se les debe asignar privilegios distintos. Odoo permite realizar este control a través de dos elementos: los permisos de acceso y las reglas de registro.
En la mayoría de los casos, Odoo dispone de varios usuarios, que cumplen diferentes papeles dentro de la organización. Encontramos, entre muchos otros, empleados del departamento de ventas y de facturación, trabajadores del área de fabricación o personas dedicadas a cuestiones relacionadas con el inventario de productos. A esto hay que sumarle la figura de un gestor general, que necesita tener visión de las diferentes piezas de la empresa.
Existen, por tanto, perfiles de usuarios distintos y resulta conveniente decidir qué pueden y qué no pueden ver, tanto por una cuestión de practicidad como por asuntos estratégicos o relacionados con la confidencialidad. Por ejemplo, ¿qué necesidad tendría un empleado de almacén de poder acceder a una factura de cliente o a la nómina de un compañero? Odoo proporciona los permisos de acceso y las reglas de registro para hacer frente a este aspecto.
1. Permisos de acceso
1.1. Configuración funcional de permisos de acceso
Los permisos de acceso permiten decidir a qué grupos de usuarios se les permite realizar operaciones sobre los documentos de un modelo determinado. Facturas, pedidos de venta o albaranes son ejemplos de modelos dentro de Odoo y las operaciones que pueden permitirse son cuatro:
Lectura. Acceder a un documento existente.
Creación. Crear un nuevo documento.
Escritura. Editar un documento existente.
Eliminación. Borrar un documento existente.
Para realizar operaciones relacionadas con los permisos de acceso tiene activarse el modo desarrollador y dirigirse a Ajustes > Técnico > Permisos de acceso.
Columna 'Nombre'. Nombre libre del permiso de acceso.
Columna 'Modelo'. Modelo sobre el que se aplica la regla de registro.
Columna 'Grupo'. Grupo de usuarios a los que se les aplica el permiso de acceso.
Columna 'Permiso para leer'. Si está marcado, los usuarios del grupo seleccionado puede acceder a un documento del modelo ya creado.
Columna 'Permiso de escritura'. Si está marcado, los usuarios del grupo seleccionado pueden editar documentos existentes del modelo.
Columna 'Acceso para crear'. Si está marcado, los usuarios del grupo seleccionado pueden crear nuevos documentos del modelo.
Columna 'Permiso para eliminar'. Si está marcado, los usuarios del grupo seleccionado pueden eliminar documentos existentes del modelo.
Por ejemplo, supongamos que tenemos tres grupos de usuarios:
Administrador de ventas.
Gestor de ventas.
Revisor de ventas.
Con estos tres grupos, podrían crearse tres permisos de acceso:
Administración de ventas. Se aplicaría al grupo de usuarios 'Administrador de ventas' sobre el modelo 'Pedido de ventas' y se le otorgaría permisos de lectura, escritura, edición y eliminación.
Gestión de ventas. Se aplicaría al grupo 'Gestor de ventas' sobre el modelo 'Pedido de ventas' y se le otorgaría permisos de lectura, escritura y eliminación.
Revisión de ventas. Se aplicaría al grupo 'Revisor de ventas' y solamente se le otorgaría permisos de lectura.
De este modo, solamente los usuarios del grupo 'Administrador de ventas' podrían eliminar los pedidos de venta. Los pedidos de venta podrían ser leídos por los tres grupos definidos pero solamente los podrían crear y editar los miembros de los grupos 'Administrador de ventas' y 'Gestor de ventas'.
1.2. Configuración de permiso de acceso desde un módulo
Si se desea, pueden incluirse permisos de acceso en un módulo de Odoo para que estén disponibles cuando se instale. Se pone como ejemplo el permiso de acceso 'Gestión de ventas'. Sería necesario definir a través del código dos elementos: el grupo sobre el que se aplicará el permiso de acceso y el permiso de acceso en sí mismo.
1.2.1. Definición de un grupo a través del código
La definición del grupo 'Gestor de ventas', de manera básica, se realizaría a través de las siguientes líneas de código:
<record id="sale_supervisor" model="res.groups"> <field name="name">Gestor de ventas</field> </record>
Con esas tres líneas, simplemente se definiría el grupo. Una vez creado, sería necesario añadir qué usuarios forman parte de ese grupo, cuestión que puede resolverse fácilmente editando funcionalmente el grupo accediendo a él de la manera explicada en el apartado 1.1.
1.2.2. Definición de permiso de acceso a través del código
Los permisos de acceso en los módulos de odoo se definen en el archivo ir.model.access.csv. Siguiendo con el ejemplo, se definiría añadiendo la siguiente línea a este fichero:
supervise_sale_order,supervise.sale.order,model_sale_order,module_name.sale_supervisor,1,1,0,1
En la línea aparecen 8 elementos separados por comas, que significan lo siguiente:
supervise_sale_order. Identificador del permiso de acceso.
supervise.sale.order. Nombre del permiso de acceso.
model_sale_order. Nombre técnico del modelo sobre el que se aplica el permiso de acceso precedido de model_
module_name.sale_supervisor. Grupo sobre el que se aplica el permiso de acceso (en este caso, el grupo creado en el apartado 1.2.1). Se define con la fórmula nombre_modulo_crea_grupo.id_grupo.
1,1,0,1. Hacen referencia a los permisos de lectura, escritura, creación y eliminación respectivamente. El 1 indica que se le otorga el permiso y el 0 indica que se le deniega.
2. Reglas de registro
¿Qué ocurre si es necesario restringir los accesos más allá de los grupos a los que pertenece un usuario? Es decir, ¿qué pasa si, a pesar de formar parte de un grupo con acceso a un documento hay normas adicionales para decidir si los permisos se aplican o no? Para solucionar esta cuestión, Odoo proporciona las reglas de registro.
El acceso a las reglas de registro se realiza con el modo desarrollador activado, desde Ajustes > Técnico > Reglas de registro.
2.1. Configuración funcional de regla de registro
La vista en la que se muestran las reglas de registro es muy similar a la de los permisos de acceso, pero se aprecian dos diferencias:
Las reglas de registro pueden aplicarse a más de un grupo. Asimismo, si no se selecciona ningún grupo, se aplicarán a todos los usuarios.
Aparece una columna llamada 'Dominio'.
Es en la columna 'Dominio' desde donde se pueden definir con más precisión los permisos, indicando condiciones adicionales que tienen que cumplirse.
Por ejemplo, en la situación definida en el apartado 1, imaginemos que se necesita que los miembros del grupo 'Gestor de ventas' solamente puedan editar aquellos pedidos de venta de los que son comerciales. Podríamos utilizar una regla de registro para ello.
La regla podría llamarse 'Edición de pedidos propios'.
El modelo al que se aplica es 'Pedido de venta'.
El grupo al que se aplica es 'Gestor de ventas'.
El dominio sería [('user_id', '=', user.id)] (para su definición se requieren ciertos conocimientos técnicos).
Se marcaría la casilla 'Aplicar para escritura'.
De este modo, se estarían restringiendo los permisos y solamente se permitiría editar presupuestos propios a los usuarios del grupo 'Gestión de ventas'.
2.2. Configuración de regla de registro desde un módulo
Es posible incluir dentro de un módulo de Odoo una serie de líneas de código para que, al instalarlo, se generen reglas de registro. El ejemplo del apartado anterior quedaría de la siguiente manera.
<record id="edit_own_orders" model="ir.rule">
<field name="name">Edicion de Pedidos Propios</field>
<field name="model_id" ref="sale.model_sale_order"/>
<field name="groups" eval="[(4, ref('module_name.sale_supervisor'))]"/>
<field name="domain_force">[('user_id', '=', user.id)]</field> <field name="perm_read" eval="False"/> <field name="perm_write" eval="True"/> <field name="perm_create" eval="False"/> <field name="perm_unlink" eval="False"/>
</record>
Los valores definidos son los siguientes:
name. Nombre libre de la regla de registro.
model_id. Nombre técnico del modelos sobre el que se aplica la regla de registro con la fórmula modulo_que_define_modelo.model_nombre_modelo.
groups. Grupo(s) sobre el que se aplica la regla de registro. Pueden añadirse tantos grupos como se desee. Cada uno de los grupos se especifica con la fórmula modulo_que_define_grupo.id_grupo. Si quisieren incluirse múltiples grupos, el valor sería el siguiente: [(4, ref('nombre_modulo.id_grupo')), (4, ref('nombre_modulo.id_grupo'))].
domain_force. Dominio que define la aplicación de la regla de registro.
perm_read/perm_write/perm_create/perm_unlink. Se indica True o False según si se quieren otorgar o no permiso de lectura, escritura, creación y eliminación.