feat: 添加 API Key 锁定功能和请求头规则系统

1. API Key 锁定功能
- 管理员可锁定/解锁用户的 API Key
- 锁定后用户无法使用、修改或删除该 Key
- 前端显示锁定状态并禁用相关操作

2. 请求头规则系统
- 将 endpoint.headers 升级为 header_rules
- 支持 set(设置)、drop(删除)、rename(重命名)操作
- 前端提供可视化规则编辑界面
- 包含数据迁移脚本

Close #37 Close #86 Close #88
This commit is contained in:
fawney19
2026-01-16 01:18:54 +08:00
parent ea45918561
commit 8e11f3864a
22 changed files with 852 additions and 56 deletions

View File

@@ -22,6 +22,7 @@ from sqlalchemy.orm import Session, joinedload
from src.config import config
from src.core.logger import logger
from src.core.enums import AuthSource
from src.core.exceptions import ForbiddenException
from src.services.system.config import SystemConfigService
if TYPE_CHECKING:
@@ -385,6 +386,10 @@ class AuthService:
logger.warning("API认证失败 - 密钥已禁用")
return None
if key_record.is_locked:
logger.warning("API认证失败 - 密钥已被管理员锁定")
raise ForbiddenException("该API密钥已被管理员锁定请联系管理员")
# 检查过期时间
if key_record.expires_at:
# 确保 expires_at 是 aware datetime

View File

@@ -19,6 +19,7 @@ import httpx
from sqlalchemy.orm import Session, joinedload
from src.core.crypto import crypto_service
from src.core.headers import get_extra_headers_from_endpoint
from src.core.logger import logger
from src.database import create_session
from src.models.database import Provider, ProviderAPIKey, ProviderEndpoint
@@ -268,7 +269,7 @@ class ModelFetchScheduler:
"api_key": api_key_value,
"base_url": endpoint.base_url,
"api_format": fmt,
"extra_headers": endpoint.headers,
"extra_headers": get_extra_headers_from_endpoint(endpoint),
}
)