使用干净的架构我需要实现权限。
我决定实现额外的权限层PermissionsChecker。 我的权限取决于数据库状态。我已为数据库中的用户分配了权限,这取决于域对象的状态。 我有适用于我的数据库的适配器。现在我应该使用该适配器在哪里获取数据?
正确答案取决于您的实际需要。 这取决于您面临的权限问题是简单的数据访问问题还是功能访问问题。
虽然我认为这是一个功能访问问题,但我认为正如评论中提到的,将权限管理与数据库混合起来并不是一个好主意。 数据库只是一个存储工具,让它的作用尽可能简单。 在数据库或数据访问层中执行此操作将使您的设计成为一场噩梦。 在这种情况下,您会发现自己传入了用户身份并遍历所有层,直到找到数据库。
如果您的项目分为 3 层:应用程序层(Web API、soap 等端点)、领域层(业务层)、基础设施层。 就我个人而言,我认为权限管理是应用程序层的一部分。 或者它可能是另一层:应用层和领域层之间的授权层。
这允许您在权限约束发生变化时保持域层不可触及。 良好设计的目标之一是减少依赖对领域层的影响,而权限管理就是一种依赖。
这还允许您测试/验证域层,而不管用户权限问题。
面向功能的设计可能对您的案例有用。
如果问题是关于数据访问问题,则意味着允许所有功能,但每个用户的数据范围不同,在这种情况下,我认为实施起来会更复杂。