ACL粒度

问题描述 投票:1回答:2

我正在尝试为我的nodejs App实现ACL。说我有以下端点:

/api/user
/api/picture 

图片属于用户。

ACL能够允许/拒绝基于userId访问端点。如果请求到/ api / user,ACL很容易知道某个userId是否可以访问它自己的数据:如果我是userId = 23并且我在/ api / user / 23上进行了GET,那么请求的资源与用于检查的数据之间的直接关系。

现在,如果请求来到带有pictureId的/ api / picture,则ACL不知道用户和图片之间的关系,例如/ api / picture / 60; ACL不知道pictureId = 60是否属于userId = 23(在上面的例子中使用)。

你知道是否有支持这种访问控制的nodejs的ACL解决方案? ACL预计的粒度是多少?

javascript node.js acl
2个回答
1
投票

文档级ACL粒度总是很棘手,因为您的数据集会增长,可能会出现一些性能问题。我个人更喜欢使用像Neo4J这样的GraphDB来存储这些类型的文档作为恕我直言,在管理这种类型的ACL时,它比查询性能更可靠。


0
投票

有一个解决方案,但它需要大量的工作。

在Picture表的数据库中,您可以创建ACL列,其中包含谁有权访问此项目的数据。然后当发生这种情况时:

请求来/ api /图片与pictureId

我假设你知道当前登录用户的userId?

如果是,您可以执行以下操作。使用pictureId从数据库获取图片,并将列ACL中的userId与当前登录的用户进行比较。如果当前登录用户的userId在列ACL中,则此用户可以读取/获取此图片。

如果需要,可以通过添加用户可以对Picture(创建,读取,更新,删除)执行的操作来添加更多功能。

© www.soinside.com 2019 - 2024. All rights reserved.