Saltar al contenido

Alcanzar

Reach es la despliegue de Vinyl de seguridad a nivel de fila (RLS). Reach permite a los desarrolladores de aplicaciones restringir qué filas están disponibles para cada usuario.

Muchos sistemas de gestión de bases de datos relacionales (RDBMS) ofrecen soporte nativo para RLS. El alcance no es una abstracción para estas ofertas nativas. En cambio, Reach se implementa mediante el motor empresarial Vinyl. Como resultado, Reach es independiente de la base de datos.

Casos de Uso

Los casos de uso comunes de Reach incluyen:

  • Asignación: los vendedores solo pueden gestionar los clientes potenciales que se les hayan asignado directamente.
  • Unidades organizativas: el alcance puede restringir el acceso de los empleados a los datos por región geográfica o división.
  • Multiinquilino: si una aplicación admite varios clientes, Reach puede limitar el acceso del cliente a su segmento de datos.

Conceptos

El alcance se compone de los siguientes conceptos básicos:

  • Regla de alcance
  • Ficha de alcance
  • Alcanzar el registro

Regla de Alcance

Una regla de alcance es un tipo de regla comercial como una regla predeterminada o de validación. Como ocurre con todas las reglas comerciales, las reglas de alcance son fundamentalmente consultas mvSQL.

La regla de alcance determina a qué segmentos de datos puede acceder un usuario. En muchos casos, una regla de alcance utilizará la who() o session() mvSQL funciona para correlacionar el usuario actual con los datos a los que puede acceder.

Ficha de Alcance

Cada regla de alcance selecciona una y solo una columna designada como token de alcance. Esta columna se identifica por el tipo de uso de la columna "Token de alcance".

El token de alcance identifica segmentos de datos accesibles al usuario. Una regla de alcance puede devolver varias filas, cada una de las cuales identifica un segmento diferente. Si la regla no devuelve ninguna fila, el usuario no tendrá acceso a ningún dato.

Por motivos de rendimiento, el token de alcance generalmente identifica un segmento de filas, no filas individuales. Por ejemplo, un token de alcance podría identificar una región geográfica. Un gerente de ventas solo podrá generar informes para clientes dentro de su región.

Normalmente, un Reach Token no identificaría a clientes individuales. Sin embargo, hay excepciones. Al crear un sistema multitentant, el token de alcance puede identificar la fila de clientes del usuario. En este escenario, el cliente es el segmento.

Alcanzar el Registro

Los desarrolladores deben registrar explícitamente una regla de alcance para un objeto de datos. Un objeto de datos puede tener múltiples registros. En cuyo caso, la intersección de esas reglas de alcance determina a qué filas puede acceder el usuario.

Un registro de alcance incluye lo siguiente:

  • Regla de alcance: la regla que restringe qué segmentos del objeto de datos son accesibles para el usuario.
  • Columna de enlace: la columna de objeto de datos enlazada por el token de alcance.
  • Rol: el rol al que se aplica la regla de alcance. Si no está asociado con un rol, la regla se aplica a todos los usuarios.
  • Activo: habilita o deshabilita la regla de alcance para fines de desarrollo y prueba.
  • Índice: orden en el que se aplican las reglas de alcance.

Nota

Tenga en cuenta que las reglas de alcance no se pueden registrar en objetos de datos arbitrarios. Las reglas de alcance se dirigen a una tabla o vista física. Las reglas solo se pueden registrar en objetos de datos que tengan como destino la misma tabla o vista.

Despliegue

Todas las reglas de Vinyl admiten un conjunto de eventos intrínsecos. El Filter El evento es responsable de recuperar filas. El alcance es aplicado por el Filter evento.

Como consecuencia, Reach se admite en los siguientes escenarios:

  • Paneles: incluye paneles de varias filas y de una sola fila, gráficos y calendarios, etc.
  • Controles - Incluye controles de Lista y Radio.
  • CRUD: incluye reglas CRUD comerciales únicamente, no reglas CRUD directas a la base de datos.

Ejemplo

Dado el siguiente esquema de tabla:

Mesa Clave principal Relaciones
Region RegionId
Customer CustomerId RegionId, clave externa para Region mesa.
Employee EmployeeId RegionId, clave externa para Region mesa.
UserId, referencia al usuario de Vinyl.

En este modelo:

  • Tanto los empleados como los clientes pertenecen a una región.
  • Cada empleado está asociado a un usuario de Vinyl.

La siguiente regla de alcance restringe a los usuarios de modo que solo puedan acceder a clientes en su propia región:

SELECT RegionId
FROM Employee
WHERE UserId = who('userid')

Suponiendo que la regla de alcance apunta al Customer mesa, se puede registrar en el Customer (Source) objeto de datos. En ese momento, Reach se aplicará a todos los paneles vinculados al Customer (Source) objeto de datos.

En muchos casos, el alcance solo debe aplicarse a algunos usuarios. Esto se puede lograr con la seguridad basada en roles (RBS). Por ejemplo, supongamos que la fuente de datos define las siguientes funciones:

  • Administrador - Puede acceder a todos los clientes.
  • Ventas: solo puede acceder a clientes de su propia región.

Al registrar la Regla de alcance, asóciela con el rol_Ventas_. Esto garantizará que el alcance solo se aplique a los usuarios con el rol_Ventas_: los usuarios con el rol Administrador tendrán acceso a todos los clientes.

Limitaciones

  • Actualmente, Reach solo es compatible con fuentes de datos RDBMS.
  • Actualmente, Reach no admite operaciones multiplataforma: la regla de Reach y el objeto de datos deben pertenecer a la misma fuente de datos.
  • El alcance no es compatible con operaciones CRUD directas a la base de datos. El alcance lo aplica el motor empresarial: las operaciones directas a la base de datos pasan por alto el motor empresarial.
  • Una regla de alcance solo puede tener una columna de token de alcance. En consecuencia, los objetos de datos están vinculados a las reglas de alcance mediante una sola columna. Esto difiere de otros tipos de reglas que permiten a los desarrolladores vincular objetos de datos a reglas utilizando varias columnas.
  • Actualmente, Reach no es compatible con Vinyl Connector.
  • Copiar un objeto de datos no copia los registros de alcance. Esto es coherente con otros tipos de reglas: los valores predeterminados, las validaciones y las acciones tampoco se copian.