【问题标题】:how to switch between roles in spring-security如何在spring-security中切换角色
【发布时间】:2018-07-14 22:15:03
【问题描述】:

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

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

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

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

    我怎样才能以最佳和有效的方式处理这个问题?谢谢。

  • 【问题讨论】:

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


      【解决方案1】:

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

      【讨论】:

        【解决方案2】:

        问题是您想将几个实体绑定在一起 - 帐户、人员、角色。我建议你像这样分开它们:

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

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

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

        更新

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

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

        【讨论】:

        • 我没看懂你的设计,每个类的class Role会有关系吗?
        • 我更新了答案,希望现在更容易理解。
        猜你喜欢
        • 1970-01-01
        • 2017-08-20
        • 2018-06-02
        • 2022-06-24
        • 2014-09-14
        • 2011-07-14
        • 1970-01-01
        相关资源
        最近更新 更多