我有两个系统
一个访问管理系统,我在其中存储资源,用户及其之间的访问权限的引用。
一个资源管理系统,用于保存有关资源的数据并提供,以及用于管理和查询它们的API。
当在资源管理系统中接收到请求时,会将查询发送到访问管理系统以获取当前用户有权访问的资源ID的列表。从中获取数据时,此列表用作资源管理PostgreSQL数据库中的标准,因此我只返回用户有权访问的数据的结果。
当用户最多可以访问数百个资源时,此方法在小规模上可以很好地工作,但是如何扩展此方法以使其能够访问2000或20000资源的用户?我无法为每个请求在系统之间传递20000个资源ID!
您的设计似乎是问题。
在不同系统中分离对象及其访问控制很奇怪。除了您遇到的效率低下之外,很难使系统保持同步。
一种有效的方法(PostgreSQL使用的方法是将对象本身的权限存储为“访问控制列表”。然后,您知道是否有人可以在不获取其他数据的情况下访问对象。另一个优点是,权限随对象自动删除。
您可以为资源ID创建一个临时表,并与数据库中的更永久的数据进行联接。可能值得尝试看看它是否适合您的用例。