如何在spring-security中切换角色

时间:2018-02-05 04:58:31

标签: spring authentication spring-boot spring-security user-roles

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

我有一个 [UserAccount] {Id,用户名,密码,isActive} [Role] {Id,roleName,description} ,我用它来使用一些 @Secured RESTful方法实现一个成功的简单登录系统 我的职责是:ADMIN,TEACHER& STUDENT

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

  • 学生用户将与成绩,课程,考试等相关
  • 教师用户将与部门,课程,研究团队等有关
  • 或者在某些情况下,具有多个角色的用户(教师和学生)就像博士生一样,希望在他的前端空间(不同视图)之间切换

    我如何以最佳和有效的方式处理这个问题?感谢。

  • 2 个答案:

    答案 0 :(得分:1)

    问题在于您希望将几个实体绑定在一起 - 帐户,人员,角色。我建议你把它们分开:

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

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

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

    <强>更新

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

    Possible class diagram

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

    答案 1 :(得分:0)

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