En mi educación me han dicho que es una idea defectuosa exponer las claves primarias reales (no solo las claves de DB, sino todos los accesores primarios) al usuario.
Siempre pensé que era un problema de seguridad (porque un atacante podría intentar leer cosas que no son las suyas).
Ahora tengo que comprobar si el usuario tiene permiso para acceder de todas formas, ¿hay alguna otra razón?
Además, como mis usuarios tienen que acceder a los datos de todos modos, necesitaré una clave pública para el mundo exterior en algún punto intermedio. Ahora que la clave pública tiene los mismos problemas que la clave principal, ¿no es así?
Se ha solicitado un ejemplo sobre por qué hacerlo de todos modos, así que aquí hay uno. Tenga en cuenta que la pregunta tiene que ver con el principio en sí, no solo si se aplica en este ejemplo. Las respuestas a otras situaciones son explícitamente bienvenidas.
La aplicación (web, móvil) que maneja la actividad, tiene múltiples interfaces de usuario y al menos una API automatizada para la comunicación entre sistemas (por ejemplo, el departamento de contabilidad quiere saber cuánto cobrar al cliente según lo que se ha hecho). La aplicación tiene varios clientes, por lo que la separación de sus datos (lógicamente, los datos se almacenan en la misma base de datos) es una necesidad del sistema. Se comprobará la validez de cada solicitud, sin importar qué.
La actividad es muy fina granular, por lo que está junta en algún objeto contenedor, llamémosla "Tarea".
Tres casos de uso:
- El usuario A quiere enviar al usuario B a alguna tarea, por lo que le envía un enlace (HTTP) para que realice alguna actividad allí.
- El usuario B tiene que salir del edificio para que abra la Tarea en su dispositivo móvil.
- La contabilidad quiere cobrar al cliente por la Tarea, pero utiliza un sistema de contabilidad de terceros que carga automáticamente la Tarea / Actividad mediante algún código que se refiere a la API REST - de la aplicación
Cada una de las casos de uso requiere (o se vuelve más fácil si) el agente para tener algún identificador direccionable para la Tarea y la Actividad.