ACL粒度

时间:2019-01-19 23:32:25

标签: javascript node.js acl

我正在尝试为我的nodejs应用程序实现ACL。说我有以下端点:

/api/user
/api/picture 

图片属于用户。

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

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

您知道是否有支持nodejs的访问控制的ACL解决方案吗?预期ACL的粒度如何?

2 个答案:

答案 0 :(得分:1)

文档级ACL粒度始终很棘手,因为您的数据集将变得越来越有些性能问题。我个人更喜欢使用Neo4J之类的 GraphDB 存储这些类型的文档,因为恕我直言,在管理这种类型的ACL及其查询性能时,它比关系数据库更可靠。

答案 1 :(得分:0)

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

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

  

请求带有图片ID的/ api / picture

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

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

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