我正在java中使用spring,我正在尝试为我的程序创建一个rest-API。我有 3 个实体要管理,所以我也有 3 个 DAO 类。 我的问题是我有 2 种类型的用户(玩家和管理员)。他们每个人都有不同的操作,他可以对每个实体/表执行。 我的问题是实现这些要求的最佳方法是什么。 我应该有 3 个服务和 3 个控制器(每个实体/表一个),还是应该创建 2 个服务和 2 个控制器(每种类型的用户一个)或者也许有比我建议的更好的方法?
编辑: 另一件可能很重要的事情是我需要验证服务中的数据,验证过程会检查表中的连接,因此在每个服务中,我还需要为不同的实体提供 Dao 对象(例如检查新操作是否具有发生操作的元素。
听起来您可能会为不同类型的用户提供不同的功能。这是管理员可以做玩家做不到的事情。因此,将会有单独的特定于管理员的服务方法,玩家使用的控制器不需要将管理服务连接到其中。
此外,交易的性质通常不特定于实体,通常您在同一交易中要处理不同的实体。如果是这样,那么为每个实体提供不同的服务可能没有意义。
在控制器级别,使用 Spring 安全性来强制谁可以调用哪个端点。我会根据共享足够多的共同点将控制器端点组织到类中,但如何分解它并不是什么大问题。
对于服务,我将有一个服务实现普通玩家的逻辑,另一个服务实现管理员功能。如果其中任何一个都有很多代码,那么我会考虑将其分解为单独的服务,保持包含普通玩家方法的服务与管理员方法之间的区别。
您可以使用 Spring 安全性查看方法级安全性。Baeldung有一个关于这个主题的很好的指南。 您基本上注释某些控制器方法,然后拒绝不满足注释条件的用户访问它们。 例如Thymeleaf也提供与Spring Security的集成,因此当用户没有特定权限时,您可以在HTML中使按钮不可用
。