前提条件
在开始本教程之前,请确保第一个教程中的机器人正常运行且没有错误。1. 添加资源授权
回想一下,在上一教程中,Auth 对象允许您注册身份验证函数,LangSmith 使用它来验证传入请求中的持有者令牌。现在您将使用它来注册授权处理程序。
授权处理程序是在身份验证成功之后运行的函数。这些处理程序可以向资源添加元数据(如谁拥有它们)并过滤每个用户可以看到的内容。
更新您的 src/security/auth.py 并添加一个在每个请求上运行的授权处理程序:
src/security/auth.py
ctx(AuthContext):包含有关当前user、用户的permissions、resource(“threads”、“crons”、“assistants”)以及正在执行的action(“create”、“read”、“update”、“delete”、“search”、“create_run”)的信息value(dict):正在创建或访问的数据。此字典的内容取决于正在访问的资源和操作。有关如何获得更严格范围的访问控制的信息,请参阅下面的添加范围授权处理程序。
- 将用户的 ID 添加到资源的元数据中。
- 返回元数据过滤器,以便用户只能看到他们拥有的资源。
2. Test private conversations
Test your authorization. If you have set things up correctly, you will see all ✅ messages. Be sure to have your development server running (runlanggraph dev):
- 每个用户都可以在自己的线程中创建和聊天
- 用户无法看到彼此的线程
- 列出线程仅显示您自己的线程
3. Add scoped authorization handlers
广泛的@auth.on 处理程序匹配所有授权事件。这很简洁,但意味着 value 字典的内容范围不够明确,并且相同的用户级访问控制应用于每个资源。如果您想要更细粒度,您还可以控制资源上的特定操作。
Update src/security/auth.py to add handlers for specific resource types:
- 创建线程
- 读取线程
- 访问助手
@auth.on.assistants)匹配 assistants 资源上的_任何_操作。对于每个请求,LangGraph 将运行与正在访问的资源和操作匹配的最具体的处理程序。这意味着上面的四个处理程序将运行,而不是广泛范围的 “@auth.on” 处理程序。
Try adding the following test code to your test file: