Architecture 在同一层或单独的层中实现访问控制?

Architecture 在同一层或单独的层中实现访问控制?,architecture,access-control,Architecture,Access Control,我想知道从体系结构的角度来看,实施访问控制的更好方法是什么 最好是在常规类/方法中进行访问控制,还是在更高级别的单独层中实现更好 我看到了两者的好处。如果它在同一层中,绝对没有办法意外地绕过它,但它可能会使代码更加复杂。 另一方面,如果它位于一个单独的层中,那么访问控制实现将与代码的其余部分分离,从而更容易进行测试和推理 我倾向于采用分层解决方案,但我不太确定 如果您有任何想法或相关链接,我将不胜感激。您如何在您的上下文中定义“层” IMO的一个很好的参考是如何在Java世界中工作。它插入到Sp

我想知道从体系结构的角度来看,实施访问控制的更好方法是什么

最好是在常规类/方法中进行访问控制,还是在更高级别的单独层中实现更好

我看到了两者的好处。如果它在同一层中,绝对没有办法意外地绕过它,但它可能会使代码更加复杂。 另一方面,如果它位于一个单独的层中,那么访问控制实现将与代码的其余部分分离,从而更容易进行测试和推理

我倾向于采用分层解决方案,但我不太确定


如果您有任何想法或相关链接,我将不胜感激。

您如何在您的上下文中定义“层”

IMO的一个很好的参考是如何在Java世界中工作。它插入到SpringMVC过滤器链中,并确保在允许调用通过之前进行授权/身份验证,但它不直接耦合到应用程序逻辑代码。您仍然可以独立地对API进行单元测试,除非通过将Spring安全问题引入代码中引入显式耦合。你认为这是在同一层吗

我会非常小心地将安全检查显式编码到每个公共方法或API端点中——这感觉像是大量重复,而且很快就会变得无法维护。作为替代方案,您可以考虑使用该模式在方法周围包装特定于安全性的逻辑

最后,如果要公开一组API或微服务,则可以选择在明确定义的独立层中实现安全性。这确实意味着您需要明确防止从网关以外的任何来源(例如通过防火墙规则)调用API