【问题标题】:System of User-Role and mapping with the other entities issue Spring boot用户角色系统和与其他实体的映射问题 Spring boot
【发布时间】:2018-09-23 01:20:54
【问题描述】:

我试图使用 spring boot、spring security、Hibernate/JPA 和 JWT 在我的应用程序中设置角色用户系统,所以我创建了两个实体第一个:

AppUser 实体:

@Entity
@Data
@AllArgsConstructor @NoArgsConstructor

public class AppUser implements Serializable {

    @Id @GeneratedValue
    private Long id;

    @Column(unique = true)
    private String username;

    private String password;

    @ManyToMany(fetch = FetchType.EAGER)
    private Collection<AppRole> roles = new ArrayList<>();

}

AppRole 实体:

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AppRole implements Serializable {

    @Id @GeneratedValue
    private Long id;
    private String roleName;

}

因此,使用 jwt 和 spring 安全性对不同用户(管理员、客户端)的身份验证一切顺利。

在做这个系统之前,我创建了两个实体:admin 和 client,但是正如你现在看到的,在这个新实现中我只有一个名为 AppUser 的实体(因为 admin 和 client 具有相同的属性)。

我现在对这个应用程序很感兴趣的问题是管理员应该管理一些实体,包括“客户”(现在不存在)、“项目”和 客户应管理实体“干预”。

项目实体:

 @Entity
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
   public class Project implements Serializable{

    @Id @GeneratedValue
    private long id;
    private String description;


      }

遵循旧的 UML_Classes 示例:新实现之前的项目 + 管理员:

UML classe

那么我将如何实现这些实体之间的关系呢?例如,如果他是管理员,我将如何说实体 AppUser 将管理实体项目?

等等

如果有任何有用的链接,谢谢你将我重定向到它,我不知道要搜索什么才能得到我想要的。

PS:这个应用程序被认为是一个 API Rest,spring boot 作为后端,angular4 客户端作为前端,在客户端中我可以得到哪个用户通过了身份验证以及他获得的角色,我想知道我的情况打算实现其他实体,例如管理员管理的项目,ORM 端,所以我可以在数据库 Mysql 中看到所有这些实体,我应该添加任何角色还是什么?

提前谢谢你。

【问题讨论】:

    标签: java hibernate spring-boot jpa roles


    【解决方案1】:

    如果计划为管理功能和用户级别功能设置单独的 API 端点,那么您可以使用 Web 安全配置来要求身份验证,并且只允许特定角色调用这些端点。
    如果端点不是分开的,那么您仍然可以使用 spring 身份验证,但必须获取当前用户和角色,并且取决于他们尝试做什么来授权您自己或拒绝。spring security java config

    编辑
    如果您打算专业地做这件事,您可以查看Auditable 这会将用户和时间戳信息添加到您的记录中

    如果你想手动添加String createdByowner 到对象。然后在jpa interface 中为对象添加方法定义,如public List&lt;Thing&gt; getThingByOwner(String username);

    【讨论】:

    • 首先谢谢你的回答,我打算做的是第二个选择,我有一个 API Rest,spring boot 作为后端,angular4 客户端作为前端,在客户端我可以获取哪个用户经过身份验证以及他获得的角色,但这不是我的问题,我想知道我将如何实现其他实体,例如管理员管理的项目,ORM 端,我是否应该添加任何角色还是什么?
    • @OneToMany/@ManyToOne 从 AppUser 到项目。会将用户 ID 存储在项目中,并允许您访问特定用户拥有的项目列表。
    • 啊,我明白了,所以不需要添加另一个名为“权限”的实体(正如我现在在某个问题中看到的那样),因为实际上这会改变我与 spring 一起使用的身份验证代码安全和 JWT,
    • spring security 将控制有权访问特定资源的用户类型(admin、user、manager、root)(想想 urls/url 端点) OneToMany/ManyToOne 显示特定实例的关系那些类型。 Bob(AppUser[admin_role]) 拥有 MKUltra(project)、Apollo(project).... 如果使用 JPA Repository,您将需要创建基于用户获取项目的查询。
    • 非常感谢您的帮助,我很感激,是的,我正在使用 JPa 存储库,您可以帮助任何网站中的任何示例吗?先感谢您 。 (y)
    猜你喜欢
    • 2018-10-01
    • 2022-12-11
    • 1970-01-01
    • 2021-01-05
    • 2020-08-09
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多