我不确定Spring Security / Spring Cloud是否可以满足我的授权需求。 这是我的用例:
示例:将内容分配给以下组:“德国”,“瑞典”,“程序员”,“经理”。
为了管理访问单个内容的权限,检查非常简单!
我最大的问题是关于列出用户可以看到的内容。目前,我通过SQL查询来管理它。我将内容与他们分配的组一起加入,然后使用这种SQL来过滤内容:
... WHERE ... group IN [[list of groups associated to the authenticated user]]
为了防止性能问题,这些查询结果将被缓存。
当我在这些内容中添加“数据”时,问题似乎更加严重,让我们想象一下这些内容可以被注释。我只想列出用户有权查看的评论。
规则很简单,如果允许查看注释的父内容,则可以阅读注释。
同样,如果我想检查用户权限以查看单个评论,则检查非常简单,但是如果我要列出评论,则事情会更加困难。
并且...最后,如果我想采用基于微服务的体系结构,则注释将由其他服务管理(否?)。但是,为了列出评论,允许用户看到我再次需要所有的“用户和组”信息,因此基于微服务的体系结构似乎不太合适。
我的设计方法完全错误吗?
非常感谢您。
答案 0 :(得分:0)
您需要将Spring Security与访问控制列表(Spring Security ACL)结合使用,这是基于域对象安全权限的最细粒度的用户权限。
使用ACL,您可以将权限分配给特定数据(相当于数据库中的一行,以便彼此理解),如读取或写入,也可以分配给用户或组。
带有ACL的Spring Security涵盖了您描述的所有方案,您可以找到start here的示例
评论将由其他服务管理(否?)
这取决于您,取决于您的情况
但是为了列出评论,允许用户看到我需要的评论 再次显示所有“用户和组”信息,
当然!过滤信息时,您需要了解具有相关组/角色的登录用户
,因此基于微服务的体系结构似乎不太合适。
为什么?您经常需要用户信息(如果您有用户,则可以在需要时阅读相关数据),这在微服务中也会发生。您需要在一个微服务之间转移用户信息(例如,使用JWT)