如何在spring-security中切换角色

问题描述 投票:0回答:2

几天来我一直在苦苦思索如何通过Spring Security在Spring Boot应用程序中实现与一个userAccount的角色之间的切换。在我的案例中有一个例子:

我有一个类[UserAccount] {Id,username,password,isActive}和[Role] {Id,roleName,description},我正在用一些@Secured RESTful方法实现一个成功的简单登录系统。 我的角色是:管理员,老师和学生

现在,我想为每个角色(例如StudentUser,TeacherUser,AdminUser)或类似的东西创建一个类,以便能够添加一些在所有用户之间不常见的新属性。 例如:

  • 学生用户将与成绩,课程,考试等相关。
  • 教师用户将与部门,课程,研究团队等相关。
  • 或者在某些情况下,具有多个角色(教师和学生)的用户(如博士生)想要在他的前端空间(不同视图)之间切换。 我该如何以最佳和最有效的方式处理这个问题?谢谢。
  • spring authentication spring-boot spring-security user-roles
    2个回答
    1
    投票

    问题是你想要将几个实体绑定在一起 - 帐户,人,角色。我建议你把它们分开:

    • 人 - 只是名称等基本数据
    • 人可以拥有一个帐户。没有帐户的人无法登录。
    • 学生/教师/管理员拥有/是个人 - 学生/教师/管理员包含特定于每个角色的信息。在设计这种关系时,有必要弄清楚一个人是否可以拥有相同类型的更多学生/教师/管理员档案(如果一个人有多个学习,那该怎么办)。如果将其设计为一对一关系,则可以将其建模为Java中的继承(Student / Teacher / Admin是Person)。

    在Spring Security中,根据帐户人员拥有的(活动)学生/教师/管理员关系分配GrantedAuthority-s(角色)。

    在您的前端,您将看到登录的人员具有哪些角色,您可以允许他们在基于角色的视图之间切换。

    更新

    为了澄清,这是类图的样子:

    Possible class diagram

    您不需要为角色分别创建一个类/表,因为角色由给定Person的Student / Teacher / Admin对象的存在决定。但是如果你出于某些原因需要它,你可以在那里添加它 - 可能Account会有1..n角色。


    0
    投票

    谢谢大家,我解决了这个问题:继承自Profile,每个角色都拥有自己的个人资料类,因此用户将拥有多个个人资料。

    © www.soinside.com 2019 - 2024. All rights reserved.