我正在开发 Web 应用程序的后端,我想创建类似用户授权的全局规则之类的东西:
如果 user.id == org.owner这意味着每个用户都可以编辑每个组织(如果他们拥有该组织的所有权),有什么好的方法可以将其实现到我们的 webapp API 中吗?,则用户()已编辑组织()
我尝试过ABAC,但不能满足我们的需求,我什至不确定这是一条好路,但我们希望我们的授权系统是可扩展的。
然而,如今,有多种解决方案可以解决 authZ 领域的问题。就可扩展性和易用性(以及其他一些事情)而言,我强烈建议您查看
cerbos.dev。 它是一个开源工具,几乎可以满足您正在寻找的功能 - 大规模 authZ,并使您能够制定您所描述的策略(以及更复杂的策略)。
根据您的堆栈,安装详细信息可能略有不同,因此我强烈建议您查看快速入门手册。
但是根据您尝试定义的策略,您最终需要的是类似这样的东西:
---
apiVersion: api.cerbos.dev/v1
resourcePolicy:
version: "default"
resource: organization
rules:
- actions: ["edit"]
effect: EFFECT_ALLOW
roles:
- user
condition:
match:
expr: request.resource.attr.owner == request.principal.id
上面是定义 Cerbos 资源策略的 yaml 文件示例(您的案例中的资源是您要为其创建策略规则的组织)。您的代码库所要做的就是触发 CheckResources 端点的 API 调用(通过适当的 SDK 或直接),记录在
here - 为此,您必须提供 3 样东西:一个 resource (组织中的组织)问题)、一个 action (在问题示例中编辑)和一个 principal 对象(尝试编辑组织的用户)。
附注这一切都在您的一端(自托管解决方案),因此无需担心您的用户数据会传输到其他人的服务器或此类安全挑战。