我正在尝试为我的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预计的粒度是多少?
文档级ACL粒度总是很棘手,因为您的数据集会增长,可能会出现一些性能问题。我个人更喜欢使用像Neo4J这样的GraphDB来存储这些类型的文档作为恕我直言,在管理这种类型的ACL时,它比查询性能更可靠。
有一个解决方案,但它需要大量的工作。
在Picture表的数据库中,您可以创建ACL列,其中包含谁有权访问此项目的数据。然后当发生这种情况时:
请求来/ api /图片与pictureId
我假设你知道当前登录用户的userId?
如果是,您可以执行以下操作。使用pictureId从数据库获取图片,并将列ACL中的userId与当前登录的用户进行比较。如果当前登录用户的userId在列ACL中,则此用户可以读取/获取此图片。
如果需要,可以通过添加用户可以对Picture(创建,读取,更新,删除)执行的操作来添加更多功能。