Los objetos CDS Access Control permiten controlar los datos que devuelven las vistas CDS en las operaciones Open SQL y SADL. Son objetos separados de las entidades CDS que permiten controlar por filtros u objetos de autorización los datos que se devuelven. Se crean por la misma herramienta de Eclipse, por ADT – ABAP Development Tool. A continuación, se detallan los aspectos técnicos de los objetos Access Control.
- Conceptos
ABAP CDS permite el control de acceso basado en un lenguaje de control de datos (CDS DCL). El control de acceso en ABAP CDS restringe aún más los datos devueltos por una entidad CDS en ABAP CDS. El control de acceso CDS se basa en lo siguiente:
Roles Funciones CDS definidas mediante la sentencia CDS DCL DEFINE ROLE. Actualmente, una función CDS se asigna a cada usuario implícitamente. Es por eso por lo que también se les conoce como roles de mapeo.
Si se define un rol CDS con reglas de acceso para una entidad CDS, las condiciones de acceso se evalúan implícitamente cada vez que se accede a un objeto usando Open SQL o usando una consulta SADL (a menos que el control de acceso esté deshabilitado usando el valor #NOT_ALLOWED para la anotación @AccessControl.authorizationCheck). Si el control de acceso está habilitado, solo se leerán los datos que cumplan con las condiciones de acceso.
Cada rol de CDS se define en su propia pieza separada de código fuente de CDS y sólo se puede editar en las herramientas de desarrollo ABAP (ADT). Cuando se activa, la función CDS se caracteriza como un objeto interno global en ABAP Dictionary. El código fuente CDS de un rol CDS se edita en un editor diferente del código fuente CDS de una entidad CDS (una vista CDS o función de tabla CDS).
- Aspectos para tener en cuenta
El control de acceso CDS proporciona un método adicional para verificar autorizaciones en el concepto de autorización de SAP. Las autorizaciones en el concepto de autorización de SAP se basan en objetos de autorización y se otorgan en el editor de roles clásico (transacción PFCG). En las verificaciones de autorización clásicas, las autorizaciones se verifican implícitamente (como cuando se llaman las transacciones) o se usa explícitamente la declaración AUTHORITY-CHECK. El control de acceso CDS amplía estas comprobaciones para incluir evaluaciones implícitas de las condiciones de acceso.
Cuando se accede a entidades de CDS usando Open SQL, los programas de ABAP no pueden distinguir si los datos no se leen porque no existen o porque no están permitidos por el control de acceso de CDS.
Actualmente, los roles de CDS solo se pueden definir para vistas de CDS y no para funciones de tabla de CDS. El control de acceso implícito solo tiene lugar cuando se accede a una vista CDS directamente usando Open SQL o usando una consulta SADL.
Cuando se accede indirectamente a las vistas de CDS utilizadas como fuentes de datos en diferentes entidades de CDS, no se produce ningún control de acceso implícito. Esto significa que los métodos y roles de CDS utilizados para acceder a las entidades de CDS deben planificarse cuidadosamente al modelar una aplicación. Por ejemplo, los accesos realizados en entidades de CDS sin roles de CDS asociados pueden envolverse en vistas de CDS con roles asociados.
Desde la propia vista CDS se puede controlar por anotación el control de acceso de los objetos Access Control, habilitando o deshabilitando este control.
@AccessControl.authorizationCheck: #VALUE
Define el control de acceso implícito cuando se utiliza el SQL / Open SQL para acceder a la vista de CDS.
Si Open SQL se usa para acceder a la vista, el control de acceso se realiza implícitamente si se asigna un rol con DEFINE ROLE a la vista. Si no hay un rol para la vista, se produce una advertencia de verificación de sintaxis.
- #NOT_REQUIRED
Como #CHECK, pero no hay advertencia de verificación de sintaxis.
- #NOT_ALLOWED
No se realiza control de acceso. Esto produce una advertencia de comprobación de sintaxis en el código fuente de CDS de un rol para la vista.
- Valores por defecto
- Valor por defecto cuando no se utiliza la anotación: #CHECK
- Valor por defecto cuando se utiliza la anotación sin valor: #CHECK
- Define Role
- Sintaxis
@MappingRole: true
[@role_annot1]
[@role_annot2]
…
[DEFINE] ROLE role_name { access_rules }
Define una función de CDS llamada role_name en CDS DCL. Cuando se accede a una entidad CDS de este tipo utilizando Open SQL o una consulta SADL, una condición de acceso se evalúa como una condición de selección adicional.
La anotación @MappingRole se debe especificar antes de la definición del rol con DEFINE ROLE. También es posible especificar más anotaciones antes de la definición del rol: @ role_annot1, @ role_annot2, y así sucesivamente. La anotación @MappingRole se usa para definir la función CDS como una función de asignación, asignada a cada usuario independientemente del cliente.
Actualmente, DEFINE ROLE solo se puede usar para roles de mapeo definidos, mapeados implícitamente para cada usuario. El control de acceso asociado se aplica para cada usuario.
Se puede definir un rol de CDS para una entidad de CDS en cada paquete y en cada sistema.