授权方式:动态组,基于权限的内容列表,基于微服务的体系结构?

时间:2019-05-02 09:56:59

标签: java design-patterns spring-security authorization spring-cloud

我不确定Spring Security / Spring Cloud是否可以满足我的授权需求。 这是我的用例:

  • 我有一个类似CMS的应用程序。
  • 可以将内容分配给一个或多个“组”
  • 如果该用户属于至少一个组,则该用户可以查看内容。
  • 重要提示:这些组未进行硬编码!通过Web应用程序,用户可以(在运行时)创建新的自定义定义的组,因此这些组和用户都位于DB表中。

示例:将内容分配给以下组:“德国”,“瑞典”,“程序员”,“经理”。

  • 德国的经理可以阅读该内容
  • 来自法国的经理可以阅读该内容(他至少是经理)
  • 法国的UX设计器无法阅读该内容。

为了管理访问单个内容的权限,检查非常简单!

我最大的问题是关于列出用户可以看到的内容。目前,我通过SQL查询来管理它。我将内容与他们分配的组一起加入,然后使用这种SQL来过滤内容:

... WHERE ... group IN  [[list of groups associated to the authenticated user]]

为了防止性能问题,这些查询结果将被缓存。

当我在这些内容中添加“数据”时,问题似乎更加严重,让我们想象一下这些内容可以被注释。我只想列出用户有权查看的评论。

规则很简单,如果允许查看注释的父内容,则可以阅读注释。

同样,如果我想检查用户权限以查看单个评论,则检查非常简单,但是如果我要列出评论,则事情会更加困难。

并且...最后,如果我想采用基于微服务的体系结构,则注释将由其他服务管理(否?)。但是,为了列出评论,允许用户看到我再次需要所有的“用户和组”信息,因此基于微服务的体系结构似乎不太合适。

我的设计方法完全错误吗?

非常感谢您。

1 个答案:

答案 0 :(得分:0)

您需要将Spring Security与访问控制列表(Spring Security ACL)结合使用,这是基于域对象安全权限的最细粒度的用户权限。

使用ACL,您可以将权限分配给特定数据(相当于数据库中的一行,以便彼此理解),如读取或写入,也可以分配给用户或组。

带有ACL的Spring Security涵盖了您描述的所有方案,您可以找到start here的示例

  

评论将由其他服务管理(否?)

这取决于您,取决于您的情况

  

但是为了列出评论,允许用户看到我需要的评论   再次显示所有“用户和组”信息,

当然!过滤信息时,您需要了解具有相关组/角色的登录用户

  

,因此基于微服务的体系结构似乎不太合适。

为什么?您经常需要用户信息(如果您有用户,则可以在需要时阅读相关数据),这在微服务中也会发生。您需要在一个微服务之间转移用户信息(例如,使用JWT)

相关问题