我有一个关于确保在我的SOA应用程序中进行适当授权的最佳实践/模式的问题。我有一堆服务,允许用户访问某些数据(存储在数据库中)。典型场景的一个例子是...
我们有一个EMPLOYEE表,它与项目具有一对多的关系。因此,一个员工可以有多个项目。此外,每个员工都属于一个区域。系统允许用户编辑员工和项目的信息。但是,每个用户只能管理少数几个区域的数据,因此只能修改属于该用户管理的区域的员工及其项目。因此用户可以访问区域A、B、C,并可以编辑区域A员工,但不能编辑区域Z员工的员工/项目数据。
我有一个服务可以让您编辑员工,另一个服务可以编辑项目。类似地,一个项目与其他实体有关系,例如日程安排,我也有编辑这些实体的服务。
然而,我的问题是--用户是否可以通过调用相应的服务来编辑项目或日程,取决于员工(与这些项目和日程相关)所属的区域。因此,对于每个修改项目或日程安排服务,或者从employee开始的数据层次结构中的任何实体,我都必须查询相应的employee并实施区域约束。考虑到数据库调用和连接的数量(我的实际示例中有很多这样的实体和相应的服务),这可能会成为非常昂贵的操作,我必须在每个服务调用中进行。对于我的场景,有没有更优雅的轻量级解决方案?
发布于 2014-09-04 01:18:27
首先,我将这些需求称为常规业务规则,而不是授权。授权在本质上通常要通用得多,这意味着是否允许用户访问特定的系统,或者是否允许用户调用特定的函数(与参数无关)。
其次,基于业务规则视图,在将事物划分为服务之前,您应该考虑到这些业务规则的一致性需求。
第三,关于你的声明“我的真实例子有很多这样的实体和相应的服务”,拥有与实体相对应的服务通常不是一个好主意。
因此,总而言之,您需要重新设计服务边界,以便将需要强制执行的规则(以高度一致的方式)包含在单个服务中。要做到这一点,一种方法是将给定实体的不同部分放在不同的服务中-前提是没有任何业务规则要求在这些不同部分之间保持一致性
https://stackoverflow.com/questions/25630107
复制相似问题