HarmonyOS掌上记账APP开发实践第89篇:DevEco Code AI Agent中权限控制操作管理
权限控制哪些操作需要审批才能运行。DevEco Code 使用permission配置来决定某个操作是否应自动运行、提示你审批还是被阻止。操作每条权限规则解析为以下之一allow— 无需审批直接运行ask— 提示审批deny— 阻止该操作配置你可以全局设置权限使用*并覆盖特定工具的权限。{ $schema: https://opencode.ai/config.json, permission: { *: ask, bash: allow, edit: deny } }你还可以一次性设置所有权限{ $schema: https://opencode.ai/config.json, permission: allow }细粒度规则对象语法对于大多数权限你可以使用对象来根据工具输入应用不同的操作。{ $schema: https://opencode.ai/config.json, permission: { bash: { *: ask, git *: allow, npm *: allow, rm *: deny, grep *: allow }, edit: { *: deny, packages/web/src/content/docs/*.mdx: allow } } }规则通过模式匹配进行评估最后匹配的规则优先。常见做法是将通配的*规则放在最前面更具体的规则放在后面。通配符权限模式使用简单的通配符匹配*匹配零个或多个任意字符?精确匹配一个字符所有其他字符按字面值匹配主目录展开你可以在模式开头使用~或$HOME来引用你的主目录。这对于external_directory规则特别有用。~/projects/*-/Users/username/projects/*$HOME/projects/*-/Users/username/projects/*~-/Users/username外部目录使用external_directory允许工具调用访问 DevEco Code 启动时工作目录之外的路径。这适用于任何接受路径作为输入的工具例如read、edit、glob、grep以及许多bash命令。主目录展开如~/...仅影响模式的书写方式。它不会将外部路径纳入当前工作空间因此工作目录之外的路径仍然必须通过external_directory来允许。例如以下配置允许访问~/projects/personal/下的所有内容{ $schema: https://opencode.ai/config.json, permission: { external_directory: { ~/projects/personal/**: allow } } }此处允许的任何目录都会继承与当前工作空间相同的默认值。由于read默认为allowexternal_directory下的条目也允许读取除非另行覆盖。当需要在这些路径中限制某个工具时请添加显式规则例如在保留读取的同时阻止编辑{ $schema: https://opencode.ai/config.json, permission: { external_directory: { ~/projects/personal/**: allow }, edit: { ~/projects/personal/**: deny } } }请将列表限定在受信任的路径上并根据需要为其他工具例如bash叠加额外的允许或拒绝规则。可用权限DevEco Code 的权限以工具名称为键外加几个安全防护项read— 读取文件匹配文件路径edit— 所有文件修改涵盖edit、write、patchglob— 文件通配匹配通配模式grep— 内容搜索匹配正则表达式模式bash— 运行 shell 命令匹配解析后的命令如git status --porcelaintask— 启动子代理匹配子代理类型skill— 加载技能匹配技能名称lsp— 运行 LSP 查询当前不支持细粒度配置webfetch— 获取 URL匹配 URLwebsearch— 网页搜索匹配查询内容external_directory— 当工具访问项目工作目录之外的路径时触发doom_loop— 当同一工具调用以相同输入重复 3 次时触发默认值如果你未指定任何配置DevEco Code 将使用宽松的默认值大多数权限默认为allow。doom_loop和external_directory默认为ask。read为allow但.env文件默认被拒绝{ permission: { read: { *: allow, *.env: deny, *.env.*: deny, *.env.example: allow } } }Ask的作用当 DevEco Code 提示审批时界面提供三种选择once— 仅批准本次请求always— 批准与建议模式匹配的后续请求在当前 DevEco Code 会话的剩余时间内有效reject— 拒绝请求always所批准的模式集合由工具提供例如bash 审批通常会将安全的命令前缀如git status*加入白名单。代理你可以为每个代理单独覆盖权限。代理权限会与全局配置合并且代理规则优先。了解更多关于代理权限的内容。Note有关更详细的模式匹配示例请参阅上方的细粒度规则对象语法部分。{ $schema: https://opencode.ai/config.json, permission: { bash: { *: ask, git *: allow, git commit *: deny, git push *: deny, grep *: allow } }, agent: { build: { permission: { bash: { *: ask, git *: allow, git commit *: ask, git push *: deny, grep *: allow } } } } }你还可以在 Markdown 中配置代理权限--- description: Code review without edits mode: subagent permission: edit: deny bash: ask webfetch: deny --- Only analyze code and suggest changes.Tip对带参数的命令使用模式匹配。grep *允许执行grep pattern file.txt而单独的grep则会阻止它。像git status这样的命令适用于默认行为但在传递参数时需要显式权限如git status *。