# 权限与确认引擎 ## 1. 目标 Agent 不能只靠提示词判断能不能执行动作。 财务系统需要独立的权限与确认引擎: ```text Permission Engine Confirmation Engine ``` 它们负责: - 判断用户是否能看某类数据。 - 判断任务是否能调用某个能力。 - 判断动作是否需要确认。 - 判断动作是否禁止自动执行。 ## 2. 动作风险分级 建议按 L0-L5 分级。 ### L0 只读查询 例子: - 查询制度。 - 查询单据状态。 - 查询规则说明。 - 查询任务运行记录。 要求: - 需要权限。 - 不需要确认。 ### L1 生成建议 例子: - 生成审批意见建议。 - 生成风险解释。 - 生成规则优化建议。 要求: - 需要权限。 - 不写业务状态。 - 不需要确认,但要标记为建议。 ### L2 生成草稿 例子: - 生成报销草稿。 - 生成付款申请草稿。 - 生成知识库候选。 要求: - 需要权限。 - 写入草稿区。 - 不进入正式流程。 ### L3 用户确认后提交 例子: - 用户确认后提交报销。 - 审批人确认后写入审批意见。 - 用户确认后发起补件。 要求: - 必须二次确认。 - 必须记录确认人。 - 必须记录确认前后内容。 ### L4 管理员确认后发布 例子: - 发布规则。 - 发布知识库。 - 启用 MCP。 - 启用任务。 要求: - 必须管理员确认。 - 必须有审核记录。 - 必须有版本。 ### L5 禁止自动执行 例子: - 自动最终审批。 - 自动付款。 - 自动绕过风控。 - 自动修改核心财务状态。 要求: - Agent 永远不能直接执行。 ## 3. 权限判断输入 ```json { "user_id": "emp_001", "agent": "user_agent", "source": "user_message", "action": "create_reimbursement_draft", "domain": "reimbursement", "resource": { "type": "reimbursement_request", "id": "" }, "capability": "travel_reimbursement_create" } ``` ## 4. 权限判断输出 ```json { "allowed": true, "risk_level": "L2", "requires_confirmation": false, "reason": "", "permission_scope": { "departments": ["current_user"], "data_masking": false } } ``` ## 5. 确认弹窗策略 需要确认的动作必须显示: - 动作名称。 - 影响对象。 - 关键字段。 - 执行后果。 - 是否可撤销。 - 确认人。 示例: ```json { "title": "确认提交报销申请", "action": "submit_reimbursement", "summary": "将提交差旅报销单 TR-202605001,金额 ¥3,280。", "risk_level": "L3", "confirm_button": "确认提交" } ``` ## 6. Hermes 权限 Hermes 使用服务账号,不使用个人账号。 建议拆分权限: ```text hermes:risk_scan hermes:finance_statistics hermes:knowledge_candidate hermes:mcp_health_check ``` Hermes 默认只允许: - 读脱敏快照。 - 跑规则。 - 调只读 MCP。 - 写报告、候选、工单。 Hermes 不允许: - 写正式审批状态。 - 写正式付款状态。 - 发布规则。 - 发布知识。 ## 7. User Agent 权限 User Agent 继承当前用户权限。 例如: - 员工只能看自己的报销。 - 部门负责人可以看本部门。 - 财务可以看授权范围内数据。 - 管理员可以管理规则、任务、MCP。 User Agent 不能扩大用户权限。 ## 8. 开发步骤 ```text Step 1: 定义 action risk level Step 2: 建立 Permission Engine 接口 Step 3: 所有工具调用前接入权限判断 Step 4: L3/L4 动作接入确认弹窗 Step 5: 审计记录确认内容 Step 6: 增加权限测试用例 ```