> 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.
工具
这些 SpiceDBPermissionTool 和 SpiceDBBulkPermissionTool 使代理能够在采取行动之前检查 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