授权策略抽象:从理论到实践
在软件开发中,授权是确保系统安全性和数据完整性的关键环节。合理的授权设计不仅能有效保护系统资源,还能提升代码的可维护性和可测试性。本文将深入探讨授权规则与执行的分离、策略对象的提取、抽象层的构建以及视图层的授权应用等方面。
授权规则与执行的分离
从分层架构的角度看,将授权规则直接定义在表示层并不合适。授权规则应描述业务逻辑,不依赖于具体的交付机制(如 HTML、API、WebSockets 等),可被不同的表示层抽象使用。而授权执行则应留在表示层,并依赖于架构栈中较低层定义的规则。
将授权规则放入模型看似可行,但存在两个主要问题。一是模型中的方法通常缺乏上下文感知能力,可能需要添加额外的上下文特定方法或修改参数,增加方法的复杂性;二是授权规则并非领域层的一部分,领域对象在授权上下文中运行,无需授权检查。因此,我们需要在服务层引入新的抽象。
ABAC(基于属性的访问控制)也被称为 PBAC(基于策略的访问控制),因为授权规则通常以策略的形式描述。我们可以利用策略对象来实现授权。
提取策略对象
策略对象并非仅用于授权和安全功能,还可应用于应用程序的任何业务规则。在授权场景中,一个策略对象通常对应一个资源,多数情况下该资源是领域模型实体。
策略对象封装了业务规则或一组相关业务规则,用于描述在给定上下文中可执行的操作。其主要目的是隐藏实现细节(通常是一堆 if - else 语句)并减少代码重复。策略对象的公共接口通常包含一个或多个谓词方法,即返回布尔值的方法。
以图书馆应用为例,我们有一个 Book 资源和对应的模型,可创建一个 BookPolicy 类来
超级会员免费看
订阅专栏 解锁全文
1698

被折叠的 条评论
为什么被折叠?



