Spring Security基于用户的权限? (不基于角色)

时间:2020-08-29 12:17:16

标签: spring spring-boot hibernate spring-security

假设我有一个由用户和项目组成的数据库。用户与项目具有一对多关系。用户可以使用其余端点进行操作。

问题是: 如何验证 this 用户拥有 this 资源?

我不希望恶意用户更改ID,然后突然他查看另一个人的项目详细信息/图像/等。可以将其视为社交媒体(我的应用程序不是社交媒体,而是试图说明问题):尽管具有相同的“状态”,但您只能查看自己的图像,而不能查看其他人的图像。

大多数在线春季安全博客都使用基于角色的方法。在这种情况下,我什至不知道要搜索什么(尝试多次搜索查询均无济于事)。

一个选择是对每个资源请求/操作运行某种类型的多联接查询,直到我到达该资源ID并检查其拥有的用户以检查它是否为登录用户。但是,我不确定这种方法是否有效,因为实际应用程序中的链中有多个表(如果我手动进行这种操作,可能会有很多联接;例如:user-> project-> tasklist-> .. 。->注释;删除注释会触发较大的链条)或如何使“授权者”使用它。

我有什么选择?

重要的是: 我正在使用spring-boot + hibernate / JPA + spring-security

1 个答案:

答案 0 :(得分:1)

Spring Security具有以下概念:

身份验证:

证明演员是谁的角色。验证使用凭据完成,其中凭据可以采用多种形式-用户名/密码,令牌,硬件密钥等。

您可以使用一组可接受的身份验证提供程序来设置Spring Security。

授权:

给出一个已认证的用户,确定该用户是否有权访问给定资源。资源可以在哪里:

  • HTTP端点。
  • Java方法。
  • 对象的属性。

您要在此处执行的是自定义授权方案。

您可以阅读有关Spring Security的授权体系结构here的信息,包括如何设置自定义授权。准备就绪后,您可能会问一些具体问题。

相关问题