Autenticación y autorización
Con respecto a la seguridad de la aplicación, los conceptos de autenticación y autorización desempeñan un papel crucial.
Vea el vídeo para obtener un resumen de la autenticación y la autorización.
Aún no hemos configurado ninguna autorización en nuestra aplicación. Esto significa que actualmente no hay restricciones y todas las solicitudes aún tienen acceso completo a toda la aplicación. En esta lección, aprenderemos a restringir el acceso a la aplicación.
En un entorno productivo, todos los puntos finales se autentican de forma predeterminada, incluso si no se configuran restricciones. El método de autenticación se puede personalizar libremente. Por conveniencia, se admite un conjunto de métodos de autenticación listos para usar para cubrir la mayoría de los escenarios comunes. En caso de que sea necesario por motivos empresariales exponer puntos finales abiertos a usuarios anónimos, se deben tomar medidas adicionales. La configuración de la autenticación para el entorno de producción no se trata en este curso.
Como ya hemos visto, no se requiere autenticación al probar la aplicación en el entorno de desarrollo. Más adelante veremos cómo configurar la autenticación para el entorno de prueba.
Separación de preocupaciones
A continuación, exploraremos las anotaciones que puede utilizar para controlar el acceso a los datos empresariales a un nivel detallado. Puede insertar las anotaciones analizadas directamente en los archivos .cds en los que se definen los servicios. En nuestro caso, este sería el archivo cat-service.cds para CatalogService y el archivo admin-service.cds para el AdminService.
Sin embargo, es una práctica recomendada almacenar las anotaciones de autorización en diferentes archivos .cds para separarlas de la definición de servicio real. Esto mantiene las definiciones de servicio reales concisas y centradas solo en la estructura. También le permite otorgar a los modelos de autorización una propiedad y un ciclo de vida separados.
Seguiremos esta práctica recomendada y crearemos archivos .cds separados para modelar las reglas de acceso para CatalogService y AdminService. Llamamos a estos archivos cat-service-auth.cds y admin-service-auth.cds respectivamente y los guardamos en la carpeta srv de nuestro proyecto, al igual que los archivos con las definiciones de servicio.
Nota
@readonly y @requires
Primero, echemos un vistazo al archivo cat-service-auth.cds, que utilizamos para controlar el acceso al CatalogService (véase la siguiente figura).

En este archivo, importamos las definiciones de las entidades Autores y Libros, así como la definición de la acción de envío de pedidos desde el modelo CatalogService a través de la directiva using .
Los autores y la entidad Libros se anotan con @readonly a través de la directiva annotate con el fin de restringir el acceso de todos los usuarios al acceso de solo lectura.
Nota
Como base para el control de acceso, puede diseñar roles conceptuales que sean específicos de la aplicación. Los usuarios pueden tener varios roles asignados por un usuario administrativo en la solución de gestión de autorizaciones de la plataforma.
Además de los roles de usuario específicos de la aplicación, CAP también admite algunos de los llamados pseudoroles predefinidos, como authenticated-user. Este rol hace referencia a los usuarios que se han autenticado correctamente.
En el ejemplo mostrado, la anotación @requires se utiliza para controlar que solo los usuarios autenticados puedan ejecutar la acción envOrder.
Nota
@restrict
A continuación, veamos el archivo admin-service-auth.cds, que contiene el control de acceso para AdminService (véase la siguiente figura).

Aquí, también, primero empleamos la directiva using para importar las definiciones a anotar (Authors and Books Entity) del modelo AdminService.
La entidad Autores está anotada con @(requires: 'admin'). Esto determina que solo los usuarios que tienen el rol de administrador específico de la aplicación pueden acceder a la entidad Autores.
Para definir autorizaciones para la entidad Libros, se utiliza la anotación @restrict . Especifica que solo los usuarios con el rol de administrador específico de la aplicación pueden realizar operaciones de LECTURA, CREACIÓN y ACTUALIZACIÓN en la entidad Libros. Las operaciones DELETE también están permitidas solo para usuarios con el rol de administrador, con la restricción adicional de que solo se pueden eliminar libros con un stock de 0.
La anotación @limit proporciona una matriz con cualquier número de objetos de privilegio, donde cada objeto de privilegio tiene la siguiente estructura:
1{ grant: <events>, to: <roles>, where: <filter-condition> }Las propiedades del objeto de autorización se definen de la siguiente manera:
- grant
uno o más eventos (como READ, CREATE, UPDATE y DELETE) a los que se aplica la autorización
- to
uno o más roles de usuario o pseudoroles a los que se aplica la autorización (opcional)
- where
una condición de filtro que restrinja aún más el acceso a un nivel de instancia (opcional)
Una solicitud pasa una restricción que consiste en una matriz de privilegios si se cumple al menos uno de los privilegios.
Nota
Nota
Anotaciones como @requires o @readonly son solo accesos directos de conveniencia para @restrict, por ejemplo:
- @(requires: 'admin') es equivalente a @(restrict: [ { grant: '*', to: 'admin' } ])
- @readonly es el mismo que @(restrict: [ { grant: 'READ' } ])

