权限控制技能(强制执行)
⚠️ 重要说明
这是强制执行的权限检查机制!
- AI 必须在执行任何需要权限的操作前调用此 Skill
- 严禁跳过权限检查直接执行操作
- 违反规则会带来安全风险
0. 认证 2.0 核心原则
每次对话都要先知道对方是谁!
用户发消息
↓
提取 open_id + platform
↓
调用 handle_unknown_user() 识别身份
↓
├── 新账号 → 创建账号 + 打招呼
├── 未绑定 → 询问名字
└── 已绑定 → 正常对话
1. 何时需要检查
需要检查的操作
| 操作类型 | 示例 |
|---|---|
| 执行 Skill | "帮我创建文档"、"发送邮件" |
| 工具调用 | 调用任何 tool |
| 敏感查询 | 查询手机号、邮箱、地址等 |
| 写操作 | 创建、修改、删除文件/数据 |
| 跨渠道 | 发消息到其他平台 |
不需要检查的操作
| 操作类型 | 示例 |
|---|---|
| 日常对话 | "你好"、"今天天气怎么样" |
| 闲聊 | "你好呀"、"最近怎么样" |
| 普通查询 | "现在几点了"、"今天几号" |
2. 检查流程(认证 2.0import sys
sys)
.path.insert(0, '/workspace/skills/permission-check')
from main import handle_unknown_user, process_name_response
# 获取用户ID
open_id = "<从消息中提取的用户ID>"
platform = "<feishu/wecom/...>"
# ============ 认证 2.0:先知道对方是谁 ============
result = handle_unknown_user(open_id, platform)
# Step 1: 处理结果
if result["action"] == "greet":
# 新账号,返回打招呼消息
return result["response"]
elif result["action"] == "ask_name":
# 未绑定用户,询问名字
return result["response"]
elif result["action"] == "normal":
# 已识别用户,记录用户信息
user = result["user"]
user_name = user.get("name") if user else None
# 继续执行后续权限检查...
# ============ 如果用户回复了名字 ============
# 当用户告诉名字后,调用:
name = "<用户告诉的名字>"
bind_result = process_name_response(open_id, platform, name)
return bind_result["response"]
完整流程图
用户发消息
↓
提取 open_id + platform
↓
handle_unknown_user()
↓
├── 新账号 → create_account() + "你好呀~ 第一次见面?"
├── 未绑定 → "我们之前聊过,你愿意告诉我名字吗?"
└── 已绑定 → 正常权限检查
↓
用户回复名字
↓
process_name_response()
↓
├── 名字不存在 → create_user() + 绑定 + "xxx你好!"
└── 名字存在 → (可加验证机制)+ 绑定 + "xxx你好!"
3. 主人审批流程
当用户申请成为朋友时:
from main import create_approval_request, notify_owner_approval, process_owner_reply
# 1. 用户申请成为朋友
approval = create_approval_request(
request_type="friend_apply",
user_id=user_id,
open_id=open_id,
target_identity="friend",
code=用户提供的暗号
)
# 2. 通知主人
msg = notify_owner_approval(approval["id"])
# 发送消息给主人
# 3. 主人回复处理
# 主人说 "同意 approval_xxx" 或 "拒绝 approval_xxx"
result = process_owner_reply(主人回复)
## 4. 响应模板
### 有权限时
(正常执行用户请求的操作)
### 无权限时
抱歉,我没有权限执行此操作。 原因:{reason} 如需获得权限,请联系主人授权。
### 无法识别用户时
抱歉,我无法确认你的身份。 如需获得权限,请先通过身份验证。
## 5. 注意事项
1. **必须调用**:即使你知道用户是谁,也必须调用此 Skill
2. **不能跳过**:严禁直接执行操作而不检查权限
3. **安全优先**:不确定时,宁可拒绝也不要放行
4. **记录日志**:检查结果会自动记录
## 6. 获取用户ID
用户ID从消息元数据中获取:
- 飞书:消息的 `sender_id` 或 `open_id`
- 企微:消息的 `user_id`
- 其他渠道:类似
如果无法获取用户ID,按无权限处理。