Contenido del curso

Configurando la seguridad de acceso

Es posible que haya notado que, al cargar, nuestro módulo recibe un mensaje de advertencia en el registro del servidor:

The model car.car has no access rules, consider adding one.

(El modelo car.car no tiene reglas de acceso, considere agregar una.)

El mensaje es bastante claro: nuestro nuevo modelo no tiene reglas de acceso, por lo que no puede ser utilizado por nadie que no sea el superusuario de admin. Como superusuario, el admin ignora las reglas de acceso a datos, y es por eso que hemos podido utilizar el formulario sin errores. Pero debemos corregir esto antes de que otros usuarios puedan usar nuestro modelo.

Otra cuestión que todavía tenemos que abordar es que queremos que las tareas pendientes sean privadas para cada usuario. Odoo soporta reglas de acceso a nivel de fila, que usaremos para implementar eso.

 

A√Īadiendo seguridad de control de acceso

Para obtener una imagen de qué información se necesita para agregar reglas de acceso a un modelo, utiliza el cliente web y ve a Settings | Technical | Security | Access Controls List :


Nota

Aquí podemos ver la ACL de algunos modelos. Indica, por grupo de seguridad, qué acciones se permiten en los registros.

Esta información debe ser proporcionada por el módulo utilizando un archivo de datos para cargar las líneas en el modelo ir.model.access. Vamos a agregar acceso completo al grupo de empleados en el modelo. El empleado es el grupo básico de acceso al que casi todos pertenecen.

Esto se hace utilizando un archivo CSV denominado security / ir.model.access.csv. Vamos a agregarlo con el siguiente contenido:

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 
acess_car_car_group_user,car.car.user,model_car_car,base.group_user,1,1,1,1 

El nombre de archivo corresponde al modelo para cargar los datos, y la primera línea del archivo tiene los nombres de columna. Estas son las columnas proporcionadas en nuestro archivo CSV:

  • id¬†es el identificador externo del registro (tambi√©n conocido como XML ID). Debe ser √ļnico en nuestro m√≥dulo.
  • name¬†es un t√≠tulo de descripci√≥n. Es s√≥lo informativo y es mejor si se mantiene √ļnico. Los m√≥dulos oficiales normalmente usan una cadena separada por puntos con el nombre del modelo y el grupo. Siguiendo esta convenci√≥n, utilizamos¬†car.car.user.
  • model_id¬†es el identificador externo del modelo al que estamos dando acceso. Los modelos tienen XML IDs generados autom√°ticamente por el ORM: para¬†car.car, el identificador es¬†model_car_car.
  • group_id¬†identifica el grupo de seguridad para dar permisos. Los m√°s importantes son proporcionados por el m√≥dulo base. El grupo Empleado es un caso as√≠ y tiene el identificador¬†base.group_user.
  • Los campos¬†perm¬†marcan el acceso a garantizar¬†read,¬†write,¬†create¬†o¬†un link¬†(borrar) el acceso.

No debemos olvidar a√Īadir la referencia a este nuevo archivo en el atributo de datos del descriptor¬†__manifest__.py. Debe tener un aspecto como este:

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

Como antes, actualice el m√≥dulo para que estas adiciones entren en vigor. El mensaje de advertencia debe desaparecer, y podemos confirmar que los permisos est√°n bien iniciando sesi√≥n con el usuario¬†demo¬†(la contrase√Īa tambi√©n es¬†demo).

Reglas de acceso a nivel de fila

Podemos encontrar la opci√≥n¬†Record Rules¬†en el men√ļ¬†Technical, junto con *Access Control List.

Las reglas de registro se definen en el modelo ir.rule. Como de costumbre, necesitamos proporcionar un nombre distintivo. También necesitamos el modelo en el que operan y el filtro de dominio que se utilizará para la restricción de acceso. El filtro de dominio utiliza la lista usual de tuplas sintáctica utilizada en Odoo.

Por lo general, las reglas se aplican a algunos grupos de seguridad en particular. En nuestro caso, lo haremos aplicable al grupo Empleados. Si no se aplica a ning√ļn grupo de seguridad en particular, se considera global (el campo¬†global¬†se establece autom√°ticamente en¬†True). Las reglas globales son diferentes porque imponen restricciones que las reglas no globales no pueden anular.

Para agregar la regla de registro, debemos crear un archivo security / security.xml con el siguiente contenido:

<?xml version="1.0" encoding="utf-8"?>

<odoo>
<data
noupdate="1">
<record
id="car_car_user_rule" model="ir.rule">
<field
name="name">Vehículos solo para los creadores</field>
<field
name="model_id" ref="model_car_car"/>
<field
name="domain_force">
[('create_uid','=',user.id)]
</field>
<field
name="groups" eval="
[(4,ref('base.group_user'))]"
/>
</record>
</data>
</odoo>

Nota

Observa el atributo noupdate = "1". Significa que estos datos no se actualizarán en actualizaciones de módulos. Esto le permitirá ser personalizado más adelante ya que las actualizaciones de módulos no destruirán los cambios realizados por el usuario. Pero ten en cuenta que esto también será el caso durante el desarrollo, por lo que es posible que desees establecer noupdate = "0" durante el desarrollo hasta que estéss satisfecho con el archivo de datos.

En el campo de grupos, también encontrarás una expresión especial. Es un campo relacional de uno a muchos, y tienen una sintaxis especial para operar. En este caso, la tupla (4, x) indica anexar x a los registros, y aquí x es una referencia al grupo Empleados, identificado por base.group_user. Esta sintaxis especial de escritura de uno-a-muchos se discute con más detalle en el Capítulo 4, Datos de Módulo.

Como antes, debemos a√Īadir el archivo a¬†__manifest__.py¬†antes de poder cargarlo en el m√≥dulo:

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

Ahora puedes probar creando varios vehículos con varios usuarios y viendo el resultado. Cuando ternimes desactiva la regla para hacer algunos desarrollos.

 

Vistas
148 N√ļmero de vistas
3 Vistas de miembros
145 Vistas p√ļblicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Usar un enlace permanente para compartir en redes sociales
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.