以编程方式使用文档

> SpiceDB 是一个开源的、基于图形的授权系统,灵感来自 Google Zanzibar。它为您的应用程序提供细粒度的、基于关系的访问控制。

安装和设置

安装 Python SDK:

pip install langchain-spicedb
uv add langchain-spicedb

可选的扩展可用于特定框架支持:

pip install langchain-spicedb[langchain]
pip install langchain-spicedb[langgraph]
pip install langchain-spicedb[all]
uv add langchain-spicedb --extra langchain
uv add langchain-spicedb --extra langgraph
uv add langchain-spicedb --extra all

您还需要一个运行中的 SpiceDB 实例。对于本地开发:

docker run --rm -p 50051:50051 authzed/spicedb serve \
    --grpc-preshared-key "sometoken" \
    --grpc-no-tls

Define your schema and permissions

创建一个定义您的授权模型的 SpiceDB 模式:

from authzed.api.v1 import Client, WriteSchemaRequest
from grpcutil import insecure_bearer_token_credentials

client = Client("localhost:50051", insecure_bearer_token_credentials("sometoken"))

schema = """
definition user {}

definition article {
    relation viewer: user
    permission view = viewer
}
"""

await client.WriteSchema(WriteSchemaRequest(schema=schema))

在用户和资源之间创建关系:

from authzed.api.v1 import (
    WriteRelationshipsRequest,
    RelationshipUpdate,
    Relationship,
    ObjectReference,
    SubjectReference,
)

# Alice can view article:doc1
relationship = Relationship(
    resource=ObjectReference(object_type="article", object_id="doc1"),
    relation="viewer",
    subject=SubjectReference(
        object=ObjectReference(object_type="user", object_id="alice")
    ),
)

await client.WriteRelationships(
    WriteRelationshipsRequest(
        updates=[
            RelationshipUpdate(
                operation=RelationshipUpdate.OPERATION_CREATE,
                relationship=relationship,
            )
        ]
    )
)

检索器

SpiceDBRetriever 用 SpiceDB 授权过滤包装任何 LangChain 检索器,移除用户没有权限访问的文档。

from langchain_spicedb import SpiceDBRetriever

有关详细演练,请参阅 SpiceDB 检索器 page.

工具

这些 SpiceDBPermissionToolSpiceDBBulkPermissionTool 使代理能够在采取行动之前检查 SpiceDB 权限。

from langchain_spicedb import SpiceDBPermissionTool, SpiceDBBulkPermissionTool

有关详细演练,请参阅 SpiceDB 工具 page.

Runnables

SpiceDBAuthFilter 是一个 LCEL 兼容的 Runnable,用于链中的授权。 SpiceDBAuthLambda 是一个轻量级包装器,用于 RunnableLambda.

from langchain_spicedb import SpiceDBAuthFilter, SpiceDBAuthLambda

LangGraph 节点

用于在 LangGraph 工作流中将授权添加为节点的工厂函数和类:

from langchain_spicedb import create_auth_node, AuthorizationNode, RAGAuthState

相关资源