Por lo general, coloco las decisiones de autorización en los controladores del lado del servidor. Estos han sido puntos finales RESTful recientemente, pero creo que lo mismo se aplica a las arquitecturas de tipo MVC. Por razones de argumento, suponga que se trata de una autorización basada en roles. Se anotará un método protegido o se realizarán cheques y se devolverán 403 si es necesario.
Ahora, dado que la autorización es, de hecho, una regla comercial: "solo los administradores pueden enumerar X", por ejemplo, creo que deberían ser empujados hacia abajo una capa. Cuando un controlador solicita a la capa empresarial que realice la operación, el servicio o la capa empresarial informa al controlador que no está autorizado.
¿Es este un enfoque razonable? ¿Hay desventajas en esto?
Odio tener un AuthorisationService que esencialmente contenga un montón de reglas estáticas codificadas de procedimiento para hacer esto, pero tal vez tenga sentido mantener toda la lógica de acceso en un solo lugar. ¿Es una preocupación transversal que debe mantenerse separada?
Entonces, pregunto si alguien ha hecho esto y cómo lo lograron de manera limpia o si hay algún buen recurso que pueda leer. Estoy usando Java fwiw pero esta es una pregunta agnóstica de lenguaje.
He revisado las preguntas relacionadas aquí y son muy delgadas en el terreno y las respuestas. Por ejemplo: Validación y autorización en modelos de dominio y llevarlo a través de una capa de servicio a MVC
Estoy leyendo los documentos de seguridad de primavera que presentan algunos buenos argumentos para que sea una preocupación transversal, pero me preocupa que sea solo la "vía de la primavera" y me gustaría tener perspectivas más amplias. También vincula su aplicación a un marco específico.