通常,我将授权决策放置在服务器端控制器中。这些最近是RESTful端点,但我认为MVC类型架构也是如此。为了争论起见,假设它是基于角色的授权。将对受保护的方法进行注释,或者进行检查并在必要时返回403s。
现在,考虑到授权实际上是一条业务规则-例如,“只有管理员可以列出X”,我认为应该将它们推到下一层。当控制器要求业务层执行操作时,服务或业务层会通知控制器未经授权。
这是合理的方法吗?这有缺点吗?
我不愿意拥有一个AuthorizationService,该服务本质上包含一堆静态过程编码规则来执行此操作,但是将所有访问逻辑都放在一个地方也许很有意义。是否应该将跨领域关注点分开?
因此,我想问是否有人做到这一点,以及他们如何以一种干净的方式实现它,或者是否有我可以阅读的好资源。我正在使用Java fwiw,但这是一个与语言无关的问题。
我已经在这里检查了相关的问题,它们在地面和答案上都很薄。例如:域模型中的验证和授权,并将其通过服务层传送到MVC
我正在阅读Spring安全文档,这些文档将其作为一个跨领域的关注点,因此提出了很好的论据,但是我担心这只是“春天的方式”,并且希望有更广阔的视野。它还将您的应用程序绑定到特定框架。