使用 Mongoose 实现 ACL 的最佳方式
Best way to implement ACL with Mongoose
我已经定义并实施了我的数据模型。我可以很容易地手动编写过滤器来为发送查询的用户过滤掉未经授权的结果(其样式为:"collection.acl.personId": queryPersonId
)
我的问题是,我应该在哪里以及如何编写这个“东西”以使其尽可能自动化?
我尝试使用自定义查询和静态方法来完成,但两者都没有成功。
静态方法缺点:我不想重写所有代码以使用 .then()。我想保持当前的链接。
自定义查询:它根本不起作用,即使按照文档进行操作也是如此。
理想的结果应该是这样的
Model.findWithAcl(filters).lean()
Model.findOneWithAcl(filters).lean()
请注意,我们使用的是 Typescript。首要任务是让某些东西工作,但拥有工作类型的能力将是紧随其后的第二优先事项。
感谢您的帮助
Casl mongoose 提供了一种从集合中过滤结果(行级别)和字段的非常好的方法。注意它也可以用在前端。
很棒的软件包,与 auth0 权限配合得很好。
https://casl.js.org/v5/en/guide/intro
https://casl.js.org/v5/en/package/casl-mongoose
我已经定义并实施了我的数据模型。我可以很容易地手动编写过滤器来为发送查询的用户过滤掉未经授权的结果(其样式为:"collection.acl.personId": queryPersonId
)
我的问题是,我应该在哪里以及如何编写这个“东西”以使其尽可能自动化? 我尝试使用自定义查询和静态方法来完成,但两者都没有成功。
静态方法缺点:我不想重写所有代码以使用 .then()。我想保持当前的链接。 自定义查询:它根本不起作用,即使按照文档进行操作也是如此。
理想的结果应该是这样的
Model.findWithAcl(filters).lean()
Model.findOneWithAcl(filters).lean()
请注意,我们使用的是 Typescript。首要任务是让某些东西工作,但拥有工作类型的能力将是紧随其后的第二优先事项。
感谢您的帮助
Casl mongoose 提供了一种从集合中过滤结果(行级别)和字段的非常好的方法。注意它也可以用在前端。
很棒的软件包,与 auth0 权限配合得很好。
https://casl.js.org/v5/en/guide/intro https://casl.js.org/v5/en/package/casl-mongoose