En règle générale, je place les décisions d'autorisation dans mes contrôleurs côté serveur. Ces derniers ont été des points de terminaison RESTful récemment, mais je pense qu'il en va de même pour les architectures de type MVC. Pour les besoins de l'argument, supposons qu'il s'agit d'une autorisation basée sur les rôles. Une méthode protégée sera annotée ou fera des vérifications et retournera 403 si nécessaire.
Maintenant, étant donné que l'autorisation est en fait une règle commerciale - "seuls les administrateurs peuvent lister X" par exemple, je pense qu'ils devraient être poussés vers le bas d'une couche. Lorsqu'un contrôleur demande à la couche métier d'effectuer l'opération, le service ou la couche métier informe le contrôleur qu'il n'est pas autorisé.
Est-ce une approche raisonnable? Y a-t-il des inconvénients à cela?
Je déteste avoir un AuthorisationService qui contient essentiellement un tas de règles codées procédurales statiques pour le faire, mais il est peut-être logique de garder toute la logique d'accès en un seul endroit. Est-ce une préoccupation transversale qui devrait être séparée?
Je demande donc si quelqu'un a fait cela et comment il y est parvenu de manière propre ou s'il existe de bonnes ressources que je pourrais lire. J'utilise Java fwiw mais c'est une question indépendante du langage.
J'ai vérifié les questions connexes ici et elles sont très minces sur le terrain et les réponses. Par exemple: Validation et autorisation dans les modèles de domaine et transfert à MVC via une couche de service
Je lis les documents de sécurité du printemps qui présentent de bons arguments pour que ce soit une préoccupation transversale, mais je crains que ce ne soit que la "voie du printemps" et j'aimerais des perspectives plus larges. Il lie également votre application à un cadre spécifique.