我正在尝试为我的nodejs应用程序实现ACL。假设我有以下端点:
/api/user
/api/picture 图片属于用户。
ACL能够根据userId允许/拒绝对端点的访问。如果一个请求到达/api/user,ACL就很容易知道某个用户是否可以访问它自己的数据:如果我是userId=23,并且我执行了一个GET on /api/ userId /23,那么在被请求的资源和用于检查的数据之间有一个直接的关系。
现在,如果请求带有pictureId的/api/picture,则ACL不知道用户和图片之间的关系,例如/api/picture/60;ACL不知道pictureId=60是否属于userId=23 (在上面的示例中使用)。
您知道nodejs有没有支持这种访问控制的ACL解决方案?ACL的粒度是多少?
发布于 2019-02-25 19:26:52
文档级ACL粒度始终是棘手的,因为您的数据集将增长,可能会出现一些性能问题。我个人更喜欢使用像Neo4J这样的GraphDB来存储这些类型的文档。在管理这种类型的ACL时,它比关系数据库可靠得多,它的查询性能也更好。
发布于 2019-02-25 19:19:19
有一种解决方案,但它需要大量的工作。
在database on Picture表中,您可以创建ACL列,其中包含有权访问此项目的人员的数据。然后当这种情况发生时:
使用pictureId将图片请求发送到/api/
我假设您知道当前登录用户的userId?
如果是,您可以执行以下操作。使用pictureId从数据库中获取图片,并将列ACL中的userId与当前登录的用户进行比较。如果来自当前登录用户的userId在ACL列中,则此用户可以读取/获取此图片。
如果需要,您可以通过添加用户可以在图片上执行的操作(创建、读取、更新、删除)来添加更多功能。
https://stackoverflow.com/questions/54272269
复制相似问题