我正在运行 Mongoose 并使用 GraphQL (Apollo) 公开一个 API。
我想实现一个 RBAC,经过一些研究,我提出了一个使用 CASL 和 graphql-shield 的解决方案。理想情况下,我想与我的 React 前端共享规则。
第一步,在一张纸上计划。
我会首先定义我的操作:创建、读取、更新、删除。
然后我会定义我的主题:汽车、摩托车。
完成后,我将继续定义我的角色:CarSpecialist、MotoSpecialist、Admin。然后我会定义一些条件:“主题是我自己的”等。
最后,我会为每个角色分配一组能力(动作、主题、条件的组合)。
现在完成所有这些,我开始实际编写我的解决方案。
我首先在 CASL 中编写能力:动作和主题很容易定义。
条件有点棘手,我至少有两个选择:
我使用“模糊”的概念,而这些概念又必须由执行它们的任何需要(后端或前端)来解释。
我使用 CASL mongoose 集成插件,代价是失去与我的前端共享的能力。
有什么可供选择的输入吗?
现在一旦定义了 CASL 能力,是否由 graphql-shield 来强制执行它们?
如何在 (CASL) 操作、主题和条件与 graphql 术语之间进行映射:模式、查询、突变......?