我有一个有关在运行时动态更改角色的问题。假设我们有一个社交网络应用程序(例如Facebook),并且我们正在使用Spring安全性进行身份验证/授权。
当某人打开其主页时,此人具有ADMIN角色,并且可以使用其主页进行所有操作。但是,当他访问另一个朋友的主页时,他应仅具有USER角色,该角色只能执行某些受限操作(例如,他不能删除其朋友的主页中的帖子)。 如果使用AuthenticationManagerBuilder,则只能为每个用户设置一个固定角色。
有人可以帮助我解决这个问题吗?
谢谢。
答案 0 :(得分:1)
我认为您应该考虑一下您的概念。用户永远是用户。 拥有首页的用户是userWithHomepage 真正的管理员就是管理员。
您需要检查页面上的currentUser是否具有当前页面的特权-并在此站点上为他分配角色。
因此,“ UserWithHomepage”进入其自己的主页,您检查:该用户是否在该站点上具有特权?如果是,请执行以下操作:在此站点上激活管理内容。如果您向他的userContext添加角色,那么他也可以作为该角色访问其他站点。我认为,这是一个安全漏洞。
因此,只要用户有权限,只需在控制器上设置一个标记或每次检查,都会发生某些事(实例化,按钮单击等)。
答案 1 :(得分:0)
您不应基于用户访问的页面来更改用户角色。对于您的情况,在访问首页时,您应该检查用户是否是首页的所有者,如果是,请给他选择编辑/删除的选项,否则请不要给他们该选项(不要显示用于编辑/删除的链接,如果它们仍然尝试执行该请求,则抛出异常。
答案 2 :(得分:0)
非常感谢,实际上,我们确实需要检查用户是否是主页的所有者!