Skip to main content
在本教程中,你将扩展上一个教程中创建的聊天机器人,为每个用户提供独立的私密对话。你将添加资源级访问控制,使用户只能看到自己的对话线程。 授权流程:认证后,授权处理器为每个资源标记 owner=用户ID,并返回过滤器,使用户只能看到自己的对话线程。

前提条件

开始本教程前,请确保第一个教程中的机器人能够正常运行且无错误。

1. 添加资源授权

回想一下,在上一个教程中,Auth 对象允许你注册一个认证函数,LangSmith 用它来验证传入请求中的承载令牌。现在你将使用它来注册一个授权处理器。 授权处理器是在认证成功后运行的函数。这些处理器可以为资源添加元数据(例如资源的所有者),并过滤每个用户能看到的内容。 更新你的 src/security/auth.py 文件,添加一个在每个请求上运行的授权处理器:
src/security/auth.py
该处理器接收两个参数:
  1. ctx (AuthContext):包含当前 user 的信息、用户的 permissionsresource(“threads”、“crons”、“assistants”)以及正在执行的 action(“create”、“read”、“update”、“delete”、“search”、“create_run”)。
  2. value (dict):正在创建或访问的数据。该字典的内容取决于正在访问的资源和操作。有关如何获得更精细的访问控制,请参阅下面的添加作用域授权处理器
请注意,这个简单的处理器做了两件事:
  1. 将用户ID添加到资源的元数据中。
  2. 返回一个元数据过滤器,使用户只能看到他们拥有的资源。

2. 测试私密对话

测试你的授权。如果设置正确,你将看到所有 ✅ 消息。请确保你的开发服务器正在运行(运行 langgraph dev):
输出:
这意味着:
  1. 每个用户可以创建并在自己的线程中聊天。
  2. 用户无法看到彼此的线程。
  3. 列出线程时只显示自己的线程。

3. 添加作用域授权处理器

宽泛的 @auth.on 处理器匹配所有授权事件。这很简洁,但也意味着 value 字典的内容没有明确的作用域,并且相同的用户级访问控制被应用于每个资源。如果你想更精细地控制,也可以控制特定资源上的特定操作。 更新 src/security/auth.py,为特定资源类型添加处理器:
请注意,现在不是只有一个全局处理器,而是有针对以下操作的特定处理器:
  1. 创建线程
  2. 读取线程
  3. 访问助手
前三个匹配每个资源上的特定操作(参见资源操作),而最后一个(@auth.on.assistants)匹配 assistants 资源上的任何操作。对于每个请求,LangGraph 将运行与正在访问的资源和操作最匹配的处理器。这意味着上述四个处理器将运行,而不是宽泛作用域的 “@auth.on” 处理器。 尝试将以下测试代码添加到你的测试文件中:
输出:
恭喜!你已经构建了一个聊天机器人,其中每个用户都有自己的私密对话。虽然这个系统使用简单的基于令牌的认证,但这些授权模式将与实现任何真实的认证系统一起工作。在下一个教程中,你将使用 OAuth2 替换你的测试用户为真实的用户账户。

后续步骤

现在你可以控制对资源的访问,你可能想要:
  1. 继续学习连接认证提供者以添加真实的用户账户。
  2. 阅读更多关于授权模式的内容。
  3. 查看 API 参考 以获取本教程中使用的接口和方法的详细信息。