permission-check 技能
功能概述
拦截消息并检查用户权限,是权限系统的核心鉴权模块。
模块说明
- main.py - 核心鉴权模块,提供用户识别、权限检查
- middleware.py - 权限检查中间件,用于消息入口处的权限检查
模块一:main.py 核心鉴权
1. identify_user(open_id, platform)
根据平台账号 ID 查找对应的用户信息。
参数:
open_id (str): 平台账号 ID(如飞书的 open_id)
platform (str): 平台名称(如 "feishu")
返回:
- 用户对象(含 user_id, name, role)或
None(未找到)
2. check_permission(user, permission)
检查用户是否拥有指定权限。
参数:
user (dict): 用户对象(需包含 role 字段)
permission (str): 权限名称(read/write/admin/execute)
返回:
权限逻辑:
| 角色 |
read |
write |
admin |
execute |
| owner |
✅ |
✅ |
✅ |
✅ |
| friend |
✅ |
❌ |
❌ |
✅ |
| stranger |
❌ |
❌ |
❌ |
❌ |
3. authenticate(request)
统一鉴权入口,拦截并验证请求。
参数:
request (dict): 请求对象,需包含 open_id, platform, permission
返回:
{"allowed": True/False, "user": user对象, "reason": "..."}
数据文件
技能依赖以下数据文件(位于 /workspace/data/):
users.json - 用户列表
accounts.json - 账号绑定关系
permissions.json - 角色权限配置
使用示例
from skills.permission_check.main import identify_user, check_permission, authenticate
# 根据 open_id 查找用户
user = identify_user("ou_xxx", "feishu")
# 检查权限
if user:
can_write = check_permission(user, "write")
# 统一鉴权
result = authenticate({
"open_id": "ou_xxx",
"platform": "feishu",
"permission": "read"
})
模块二:middleware.py 权限检查中间件
中间件用于在消息入口处检查权限,支持配置开关和熔断机制。
1. check_request(request)
检查请求权限的主入口。
参数:
request (dict): 请求对象,需包含:
open_id (str): 平台账号 ID
platform (str): 平台名称
action/command/type (str): 操作类型(可选)
返回:
{"allowed": True/False, "user": user对象, "reason": "...", "skipped": True/False}
特性:
- 只对需要 execute 权限的操作进行检查
- 日常对话类操作(chat, message, ask 等)自动跳过
- 配置
enabled=false 时跳过所有检查
- 缺少用户标识时放行
- 检查异常时熔断放行并记录日志
2. check_permission(request, permission)
检查特定权限的中间件。
参数:
request (dict): 请求对象
permission (str): 权限名称(read/write/admin/execute)
返回:
使用示例
from skills.permission_check.middleware import check_request
# 在消息入口处调用
result = check_request({
"open_id": "ou_xxx",
"platform": "feishu",
"action": "skill",
"text": "执行某个技能"
})
if not result["allowed"]:
return "权限不足,无法执行此操作"
# 继续处理请求...
配置开关
编辑 /workspace/config/permission.json:
{
"enabled": true
}
enabled: true - 启用权限检查
enabled: false - 禁用权限检查(放行所有请求)
1---2name: permission-check3description: permission-check 技能4---56# permission-check 技能78## 功能概述910拦截消息并检查用户权限,是权限系统的核心鉴权模块。1112## 模块说明1314- **main.py** - 核心鉴权模块,提供用户识别、权限检查15- **middleware.py** - 权限检查中间件,用于消息入口处的权限检查1617---1819## 模块一:main.py 核心鉴权2021### 1. identify_user(open_id, platform)2223根据平台账号 ID 查找对应的用户信息。2425**参数:**26- `open_id` (str): 平台账号 ID(如飞书的 open_id)27- `platform` (str): 平台名称(如 "feishu")2829**返回:**30- 用户对象(含 user_id, name, role)或 `None`(未找到)3132### 2. check_permission(user, permission)3334检查用户是否拥有指定权限。3536**参数:**37- `user` (dict): 用户对象(需包含 role 字段)38- `permission` (str): 权限名称(read/write/admin/execute)3940**返回:**41- `True` 允许,`False` 拒绝4243**权限逻辑:**44| 角色 | read | write | admin | execute |45|------|------|-------|-------|---------|46| owner | ✅ | ✅ | ✅ | ✅ |47| friend | ✅ | ❌ | ❌ | ✅ |48| stranger | ❌ | ❌ | ❌ | ❌ |4950### 3. authenticate(request)5152统一鉴权入口,拦截并验证请求。5354**参数:**55- `request` (dict): 请求对象,需包含 open_id, platform, permission5657**返回:**58- `{"allowed": True/False, "user": user对象, "reason": "..."}`5960## 数据文件6162技能依赖以下数据文件(位于 /workspace/data/):63- `users.json` - 用户列表64- `accounts.json` - 账号绑定关系65- `permissions.json` - 角色权限配置6667## 使用示例6869```python70from skills.permission_check.main import identify_user, check_permission, authenticate7172# 根据 open_id 查找用户73user = identify_user("ou_xxx", "feishu")7475# 检查权限76if user:77 can_write = check_permission(user, "write")7879# 统一鉴权80result = authenticate({81 "open_id": "ou_xxx",82 "platform": "feishu",83 "permission": "read"84})85```8687---8889## 模块二:middleware.py 权限检查中间件9091中间件用于在消息入口处检查权限,支持配置开关和熔断机制。9293### 1. check_request(request)9495检查请求权限的主入口。9697**参数:**98- `request` (dict): 请求对象,需包含:99 - `open_id` (str): 平台账号 ID100 - `platform` (str): 平台名称101 - `action/command/type` (str): 操作类型(可选)102103**返回:**104- `{"allowed": True/False, "user": user对象, "reason": "...", "skipped": True/False}`105106**特性:**107- 只对需要 execute 权限的操作进行检查108- 日常对话类操作(chat, message, ask 等)自动跳过109- 配置 `enabled=false` 时跳过所有检查110- 缺少用户标识时放行111- 检查异常时熔断放行并记录日志112113### 2. check_permission(request, permission)114115检查特定权限的中间件。116117**参数:**118- `request` (dict): 请求对象119- `permission` (str): 权限名称(read/write/admin/execute)120121**返回:**122- 同 check_request123124### 使用示例125126```python127from skills.permission_check.middleware import check_request128129# 在消息入口处调用130result = check_request({131 "open_id": "ou_xxx",132 "platform": "feishu",133 "action": "skill",134 "text": "执行某个技能"135})136137if not result["allowed"]:138 return "权限不足,无法执行此操作"139140# 继续处理请求...141```142143### 配置开关144145编辑 `/workspace/config/permission.json`:146147```json148{149 "enabled": true150}151```152153- `enabled: true` - 启用权限检查154- `enabled: false` - 禁用权限检查(放行所有请求)