Objectives
After completing this lesson, you will be able to:
- Crear campos de autorización y objetos de autorización.
- Implementar controles de acceso CDS
Objetos de autorización y campos de autorización
Cuando desarrolla un modelo de datos, también debe pensar en cómo proteger los datos contra el acceso no autorizado. Anteriormente en este recorrido de aprendizaje, aprendió que los objetos de autorización forman la base para el control de autorización específico del usuario basado en roles. Para proteger sus datos contra el acceso de escritura no autorizado, las verificaciones de autorización se implementan en el código ABAP mediante la palabra clave AUTHORITY-CHECK. Para evitar el acceso de lectura no autorizado, el uso de controles de acceso CDS debe ser la primera opción.
Un objeto de autorización agrupa hasta diez campos de autorización que están relacionados y deben verificarse juntos. Los campos de autorización son objetos de desarrollo separados. Se puede hacer referencia al mismo campo de autorización en más de un objeto de autorización.
Los campos de autorización se tipifican con elementos de datos. Los elementos de datos o los dominios que utilizan suelen proporcionar la conexión entre los campos de autorización y los datos que protegen.
Si su modelo de datos requiere sus propios objetos de autorización o si utiliza los existentes, depende en gran medida de la independencia de su modelo de datos de los datos existentes.
Si sus datos están conectados a modelos de datos existentes, siempre vale la pena buscar objetos de autorización existentes.
Consejo
Inicie la búsqueda utilizando la referencia de utilización para los elementos de datos que utiliza en sus tablas de base de datos para ver si existen campos de autorización relacionados.
Normalmente, antes de crear un nuevo objeto de autorización, cree primero uno o más campos de autorización nuevos.
El nombre del campo de autorización está limitado a 10 caracteres.
Tenga en cuenta que debe especificar un elemento de datos existente desde el principio. En este ejemplo, el campo de autorización Z00DEPMENT se crea mediante el elemento de datos Z00_DEPARTMENT_ID.
En el diálogo de actualización para el campo de autorización, se recomienda especificar una tabla de verificación. La tabla de verificación es una tabla de base de datos que contiene los valores permitidos para el campo de autorización. En función de su modelo de datos, será una tabla Customizing o una tabla con datos maestros. En el ejemplo, utilizamos la tabla de datos maestros para los departamentos.
Para un campo de autorización recién creado, un mensaje de advertencia en la cabecera o en la vista de problemas le indica que el campo de autorización aún no se ha utilizado. Enlaces en la sección ¿Qué sigue? La sección sirve como correcciones rápidas para esta advertencia. Aquí puede añadir el campo de autorización a un objeto de autorización existente o crear un nuevo objeto de autorización para él.
Cuando crea un nuevo objeto de autorización, debe proporcionar un nombre y una descripción como de costumbre. Este nombre también está limitado a 10 caracteres.
Nota
La clase de objeto define grupos de objetos de autorización. Si puede asignar una clase de objeto o no, depende de la plataforma en la que se desarrolle. En SAP BTP, entorno ABAP, actualmente solo hay una clase de objeto (CPAE) para todos los objetos de autorización.
Cualquier objeto de autorización nuevo contiene el campo de autorización ACTVT por defecto. Este campo se utiliza para distinguir entre varias operaciones de datos con valores estandarizados.
Por defecto, el objeto de autorización tiene en cuenta las actividades Crear (valor "01"), Leer (valor "03", Actualizar (valor "02") y Borrar (valor "06"). Puede eliminar actividades que no necesite y añadir más de un gran pool de actividades disponibles. Sitúe el cursor en el campo de entrada y pulse Ctrl + Espacio para visualizar la lista de actividades disponibles.
Nota
En raras situaciones, incluso puede eliminar completamente el campo de autorización ACVT. Esto solo debería hacerse si la verificación de autorización es independiente de la operación realizada.
Para añadir más campos de autorización, sitúe el cursor en el campo de entrada y pulse Ctrl + Espacio para visualizar la lista de campos de autorización disponibles.
Consejo
No es necesario activar ni los campos de autorización ni los objetos de autorización. Basta con guardarlos.
Cómo crear un objeto de autorización
Reproduzca el vídeo para ver cómo crear un objeto de autorización.
Control de acceso CDS de objeto de repositorio
Anteriormente, en este viaje de aprendizaje, se sabía que los controles de acceso CDS se utilizaban para filtrar conjuntos de datos en función de autorizaciones. Repasemos el principio básico:
Un objeto de repository del tipo control de acceso CDS define un rol CDS utilizando la palabra clave DEFINE ROLE. Dentro del rol, la palabra clave GRANT SELECT ON relaciona el rol CDS con una entidad CDS, por ejemplo, una vista CDS, y después de la palabra clave WHERE, define una o más condiciones de acceso. Siempre que el código ABAP accede a la entidad CDS, la interfaz de base de datos filtra el resultado de selección según estas condiciones de acceso.
Los controles de acceso CDS solo tienen efecto cuando se accede a la entidad CDS directamente desde el código ABAP. Se ignoran si se accede a la entidad CDS indirectamente, por ejemplo, mediante otra entidad CDS.
Veamos este ejemplo: el control de acceso CDS R_EMPLOYEE contiene la definición del rol CDS R_Employee. Restringe el acceso a la entidad de vista CDS R_Employee con una condición de acceso basada en autorizaciones de usuario (condición PFCG).
Condiciones de acceso
Los controles de acceso CDS admiten varios tipos de condiciones de acceso. Las condiciones de acceso más importantes son las siguientes:
- Condiciones literales
Una condición literal (también conocida como condición simple) compara un elemento de una entidad CDS con un valor fijo. Las condiciones literales son la forma más simple de condiciones de acceso. No dependen del usuario actual. Como resultado de ello, normalmente se combinan con otros tipos de condiciones de acceso.
- Condiciones de PFCG
Una condición PFCG (también conocida como aspecto PFCG) asocia elementos de una entidad CDS con autorizaciones en el concepto de autorización de SAP (que se basan en objetos de autorización). Las condiciones PFCG son la condición de acceso más común para entidades CDS que leen directamente de las tablas de base de datos.
- Condiciones de herencia
Una condición de herencia aplica las condiciones de otro rol CDS. Las condiciones de herencia son la condición de acceso habitual para vistas CDS que leen de otras entidades CDS (Vista en vista).
Echemos un vistazo a algunos ejemplos de condiciones simples.
El primer ejemplo es una condición literal. Especifica que el valor del elemento de vista DepartmentId debe ser igual a 'ADMIN' o, en otras palabras, que un acceso de lectura a la entidad CDS relacionada solo devuelve conjuntos de datos que pertenecen al departamento ADMIN.
El segundo ejemplo es también una condición de acceso simple, pero no un literal. La condición de acceso enlaza el elemento de vista CreatedBy con el nombre de usuario del usuario actual. Un acceso de lectura a la entidad CDS relacionada solo devuelve conjuntos de datos que el usuario actual ha creado él mismo.
El tercer ejemplo ilustra que puede utilizar los operadores lógicos AND y OR para combinar diferentes condiciones de acceso. Aquí, las condiciones están conectadas con OR, lo que significa que los usuarios pueden ver todos los conjuntos de datos que han creado ellos mismos, independientemente del departamento al que pertenezcan. A partir de los conjuntos de datos creados por otros usuarios, solo pueden ver aquellos que pertenecen al departamento ADMIN.
Consejo
Al crear un control de acceso CDS basado en el modelo Definir rol con condición simple, obtiene la estructura básica para una condición literal y una condición de aspecto de usuario.
Ejemplos: Condiciones PFCG
Los roles CDS con solo condiciones de acceso simples no son muy comunes. Si se utilizan, las condiciones simples se combinan con otras condiciones de acceso, por ejemplo, condiciones PFCG. Las condiciones PFCG vinculan uno o más elementos de vista a las autorizaciones en los datos maestros del usuario actual.
Reproduzca el vídeo para ver un ejemplo de un rol CDS con condiciones PFCG y condiciones de herencia.
Creación de control de acceso CDS
Para crear un nuevo control de acceso CDS, proceda de la siguiente manera:
- En el Explorador de proyectos, localice la definición de datos que contiene la definición de la entidad CDS para la que desea proporcionar reglas de acceso.
- Haga clic con el botón derecho en la definición de datos y seleccione Nuevo control de acceso.
- Al crear el control de acceso para una entidad CDS específica, el campo de entrada Entidad protegida ya contiene el nombre de esta entidad CDS. Introduzca un nombre y una descripción para el nuevo control de acceso y seleccione Siguiente.
Nota
Se recomienda encarecidamente que el control de acceso y la entidad protegida tengan el mismo nombre.
- En función del tipo necesario de condición de acceso, seleccione uno de los modelos que empiecen por Definir rol. A continuación, seleccione Finalizar.
Anotación AccessControl.checkAuthorization
Al crear una entidad de vista CDS, puede utilizar la anotación @AccessControl.Authorization para controlar si un control de acceso, puede, debería, debe o no debe existir para esta vista.
Los valores posibles son los siguientes:
- #NOT_REQUIRED
Si un rol CDS protege la vista, se evalúa en tiempo de ejecución. La verificación de sintaxis no verifica si existe un rol CDS o no. Este es el valor predeterminado.
- #CHECK
Como #NOT_REQUIRED, pero con una advertencia de verificación de sintaxis si ningún rol CDS protege la vista.
- #OBLIGATORIO
Al igual que #CHECK, pero además, el sistema emite un error en tiempo de ejecución si ningún rol CDS protege la vista.
- #NOT_ALLOWED
No se realiza control de acceso. Si se asigna un rol a esta vista, se produce un mensaje de advertencia de sintaxis y el control de acceso se ignora en el tiempo de ejecución.
- #PRIVILEGED_ONLY
Se debe acceder a la entidad CDS mediante la adición ABAP SQL WITH PRIVILEGED ACCESS. Para obtener información detallada, consulte la nota SAP: 2725274.
Cómo implementar un control de acceso CDS
Reproduzca el vídeo para ver cómo implementar un control de acceso CDS.
Crear un objeto de autorización y controles de acceso CDS
Ha desarrollado un modelo de datos con tablas de base de datos y entidades de vista CDS. Para proteger los datos contra el acceso no autorizado, defina un campo de autorización y un objeto de autorización. A continuación, cree controles de acceso CDS para sus entidades de vista CDS.
Prerrequisitos
Para este ejercicio, necesita las entidades de vista CDS que ha creado en ejercicios anteriores (los nombres sugeridos eran: Z##_R_Department, Z##_R_Employee, Z##_C_DepartmentQuery y Z##_C_EmployeeQuery, donde ## es su número de grupo). Si no ha finalizado estos ejercicios, cree copias de las cuatro definiciones de datos del paquete /LRN/S4D430_EXERCISE, que terminan con _AUT.
Tarea 1: Definir objeto de autorización
Defina un objeto de autorización para controlar el acceso a los datos de empleado y departamento en función del departamento relacionado (nombre sugerido: Z##DPMENT, donde ## es su número de grupo). Defina el objeto de autorización con dos campos de autorización: un nuevo campo de autorización (nombre sugerido: Z##DPMNT) que se basa en su elemento de datos para el ID de departamento (el nombre sugerido era: Z##_DEPARTMENT_ID) y el campo de autorización estándar ACTVT con las actividades permitidas por defecto.
Nota
Si no ha creado ningún elemento de datos para el ID de departamento, utilice en su lugar el elemento de datos /LRN/DEPARTMENT_ID.
Pasos
Cree un campo de autorización basado en el elemento de datos para el ID de departamento (nombre sugerido: Z##DEPMENT).
En el Explorador de proyectos, haga clic con el botón derecho en el paquete para abrir el menú contextual y seleccione Nuevo→Otro objeto de ABAP Repository.
En el campo de filtro, introduzca au y seleccione Campo de autorización de la lista de sugerencias.
Introduzca Z##DPMNT como Nombre y Z##_DEPARTMENT_ID como Elemento de datos. A continuación, seleccione Siguiente.
Confirme la orden de transporte y seleccione Finalizar.
Fije su tabla de base de datos para datos de departamento como tabla de verificación (el nombre sugerido era: Z##DEPMENT) y grabe el campo de autorización.
Nota
Si su campo de autorización se basa en el elemento de datos /LRN/DEPARTMENT_ID, debe utilizar la tabla de base de datos /LRN/DEPMENT_REL.
Sitúe el cursor en el campo Verificar tabla, introduzca Z## y pulse Ctrl + Espacio para abrir una ayuda para entradas.
En la ayuda para entradas, seleccione Z##DEPMENT.
Pulse Ctrl + S para grabar el campo de autorización.
Cree un nuevo objeto de autorización y asígnele el campo de autorización.
En la definición del campo de autorización, desplácese hacia abajo hasta la sección ¿Qué es lo siguiente? y seleccione Crear un nuevo objeto de autorización y asígnele el campo de autorización.
Introduzca Z##DPMNT como Nombre y Autorización por departamento como Descripción y, a continuación, seleccione Siguiente.
Confirme la orden de transporte y seleccione Finalizar.
Confirme que el nuevo objeto de autorización contiene el campo de autorización estándar ACTVT y las actividades permitidas por defecto.
Inspeccione la sección Campos de autorización que debería contener su propio campo de autorización y el campo de autorización estándar ACTVT.
Inspeccione la sección Actividades permitidas que debería contener las cuatro actividades predeterminadas.
Grabe el objeto de autorización.
Pulse Ctrl + S para grabar el objeto de autorización.
Tarea 2: Definir controles de acceso
Defina controles de acceso para sus entidades de vista base, es decir, la entidad de vista base para datos de departamento (el nombre sugerido era: Z##_R_Department) y la entidad de vista base para datos de empleado (el nombre sugerido era: Z##_R_Employee). Utilice un modelo que le permita controlar el acceso en función del objeto de autorización que acaba de crear.
Nota
Siguiendo una recomendación general, nombre los controles de acceso después de la entidad de vista que protegen.
Pasos
Abra su entidad de vista base para datos de departamento en la herramienta Vista previa de datos.
Abra la definición de la entidad de vista y pulse F8 para abrir la herramienta Vista previa de datos.
Para esta entidad de vista, cree un control de acceso CDS que defina un rol CDS con una condición PFCG.
En el Explorador de proyectos, localice su definición de datos CDS Z##_R_DEPARTMENT.
Haga clic con el botón derecho en la definición de datos para abrir el menú contextual y seleccione Nuevo control de acceso.
Copie el nombre del campo Entidad protegida en el campo Nombre.
En el campo Descripción, introduzca Departamento (control de acceso) y, a continuación, seleccione Siguiente.
Confirme la orden de transporte y seleccione Siguiente.
En la lista de modelos, seleccione Definir rol con aspecto PFCG y seleccione Finalizar.
En el código generado, haga referencia a su objeto de autorización.
Ajuste el código de la siguiente manera:
12345678910111213
define role Z##_R_DEPARTMENT
{
grant select on Z##_R_Department
where (entity_element_1, entity_element_2)
= aspect pfcg_auth(
Z##DPMNT,
authorization_field_1,
authorization_field_2,
filter_field_1 = 'filter_value_1'
);
}
Nota
Hemos introducido saltos de línea adicionales para aumentar la legibilidad en el material de formación impreso.
Sustituya la primera reserva-espacio para campos de autorización por el nombre de su campo de autorización. A continuación, elimine la segunda reserva-espacio.
Ajuste el código de la siguiente manera:
123456789101112
define role Z##_R_DEPARTMENT
{
grant select on Z##_R_Department
where (entity_element_1, entity_element_2)
= aspect pfcg_auth(
Z##DPMNT,
Z##DPMNT,
filter_field_1 = 'filter_value_1'
);
}
Utilice el campo de autorización ACTVT como campo de filtro y suministre el valor de filtro para la actividad Visualizar.
Ajuste el código de la siguiente manera:
123456789101112
define role Z##_R_DEPARTMENT
{
grant select on Z##_R_Department
where (entity_element_1, entity_element_2)
= aspect pfcg_auth(
Z##DPMNT,
Z##DPMNT,
ACTVT = '03'
);
}
Haga referencia a un elemento de entidad adecuado para proporcionar el primer campo de autorización. A continuación, elimine la reserva-espacio para un segundo elemento de vista.
Ajuste el código de la siguiente manera:
123456789101112
define role Z##_R_DEPARTMENT
{
grant select on Z##_R_Department
where ( Id )
= aspect pfcg_auth(
Z##DPMNT,
Z##DPMNT,
ACTVT = '03'
);
}
Active el control de acceso y actualice la visualización en la herramienta Vista previa de datos.
Pulse Ctrl + F3 para activar el objeto de desarrollo.
Vuelva a la Vista previa de datos para la entidad protegida y seleccione Actualizar.
Como alternativa, puede pulsar F5 para actualizar los datos visualizados.
Para ver al menos algunos datos, edite de nuevo el control de acceso CDS y sustituya su propio objeto de autorización Z##DPMNT por el objeto de solución /LRN/DPMNT y su propio campo de autorización Z##DPMNT por el campo de autorización /LRN/DPMNT. Para este objeto de autorización, su usuario ya tiene algunas autorizaciones.
Vuelva al código fuente de su control de acceso CDS.
Ajuste el código de la siguiente manera:
123456789101112
define role Z##_R_DEPARTMENT
{
grant select on Z##_R_Department
where ( Id )
= aspect pfcg_auth(
/LRN/DPMNT,
/LRN/DPMNT,
ACTVT = '03'
);
}
Active el control de acceso y actualice la visualización en la herramienta Vista previa de datos.
Del mismo modo, cree un control de acceso CDS para su entidad de vista base para datos de empleado.
En el explorador de proyectos, localice su definición de datos CDS Z##_R_EMPLOYEE.
Haga clic con el botón derecho en la definición de datos para abrir el menú contextual y seleccione Nuevo control de acceso.
Copie el nombre del campo Entidad protegida en el campo Nombre.
En el campo Descripción, introduzca Empleado (control de acceso) y, a continuación, seleccione Siguiente.
Confirme la orden de transporte y seleccione Siguiente.
En la lista de modelos, seleccione Definir rol con aspecto PFCG y seleccione Finalizar.
Ajuste el código generado de la siguiente manera:
123456789101112
define role Z##_R_EMPLOYEE
{
grant select on Z##_R_Employee
where ( DepartmentId )
= aspect pfcg_auth(
/LRN/DPMNT,
/LRN/DPMNT,
ACTVT = '03'
);
}
Active el control de acceso.
Pulse Ctrl + F3 para activar el objeto de desarrollo.
Tarea 3: Definir controles de acceso heredados
Defina un control de acceso para la entidad de vista con la que consulta datos de empleado en función de dos parámetros de entrada (el nombre sugerido era: Z##_C_EmployeeQueryP). Del mismo modo, defina un control de acceso para su entidad de vista con la que consultar y los datos de empleado por departamento (el nombre sugerido era: Z##_C_DepartmentQuery). En ambos casos, utilice una plantilla que le permita heredar las reglas de autorización de las entidades de vista subyacentes.
Nota
Siguiendo una recomendación general, nombre los controles de acceso después de la entidad de vista que protegen.
Pasos
Abra la definición de su entidad de vista CDS que consulta datos de empleado en función de dos parámetros de entrada.
Pulse Ctrl + Mayús + A.
Introduzca el nombre de la definición de datos CDS que desea abrir, es decir, Z##_C_EMPLOYEEQUERYP, y seleccione OK.
Para la entidad de vista con parámetros, cree un control de acceso CDS que defina un rol CDS con condiciones heredadas.
En el Explorador de proyectos, localice su definición de datos CDS Z##_C_EMPLOYEEQUERYP.
Haga clic con el botón derecho en la definición de datos para abrir el menú contextual y seleccione Nuevo control de acceso.
Copie el nombre del campo Entidad protegida en el campo Nombre.
En el campo Descripción, introduzca Consulta de empleado (control de acceso) y, a continuación, seleccione Siguiente.
Confirme la orden de transporte y seleccione Siguiente.
En la lista de plantillas, seleccione Definir rol con condiciones heredadas y seleccione Finalizar.
En el código generado, haga referencia a la entidad de vista que utiliza la entidad protegida como fuente de datos, es decir, Z##_R_Employee.
Ajuste el código de la siguiente manera:
1234567
define role Z##_C_EMPLOYEEQUERYP {
grant select on Z##_C_EmployeeQueryP
where inheriting conditions
from entity Z##_R_Employee;
}
Active el control de acceso.
Pulse Ctrl + F3 para activar el objeto de desarrollo.
Abra la definición de su entidad de vista CDS que agrega datos de empleado por departamento.
Pulse Ctrl + Mayús + A.
Introduzca el nombre de la definición de datos CDS que desea abrir, es decir, Z##_C_DEPARTMENTQUERY, y seleccione OK.
Defina un control de acceso que herede las condiciones de acceso de la fuente de datos primaria.
En el Explorador de proyectos, localice su definición de datos CDS Z##_C_DEPARTMENTQUERY.
Haga clic con el botón derecho en la definición de datos para abrir el menú contextual y seleccione Nuevo control de acceso.
Copie el nombre del campo Entidad protegida en el campo Nombre.
En el campo Descripción, introduzca Consulta de departamento (control de acceso) y, a continuación, seleccione Siguiente.
Confirme la orden de transporte y seleccione Siguiente.
En la lista de plantillas, seleccione Definir rol con condiciones heredadas y seleccione Finalizar.
Ajuste el código generado de la siguiente manera:
1234567
define role Z##_C_DEPARTMENTQUERY {
grant select on Z##_C_DepartmentQuery
where inheriting conditions
from entity Z##_R_Department;
}
Active el control de acceso.
Pulse Ctrl + F3 para activar el objeto de desarrollo.