feat: 添加 API Key 发布功能
- 新增 ApiKey 模型,支持 API 密钥认证 - 添加 require_api_key 装饰器实现 API 认证 - 实现 5 个站点管理 API 接口 (GET/POST/PUT/DELETE) - 添加后台 API Key 管理界面 - 添加数据库迁移脚本 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
40
models.py
40
models.py
@@ -155,6 +155,46 @@ class Admin(UserMixin, db.Model):
|
||||
def __repr__(self):
|
||||
return f'<Admin {self.username}>'
|
||||
|
||||
|
||||
class ApiKey(db.Model):
|
||||
"""API密钥模型"""
|
||||
__tablename__ = 'api_keys'
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
key = db.Column(db.String(64), unique=True, nullable=False, comment='API密钥')
|
||||
name = db.Column(db.String(50), nullable=False, comment='密钥名称')
|
||||
permissions = db.Column(db.String(200), default='site:read,site:write', comment='权限列表')
|
||||
is_active = db.Column(db.Boolean, default=True, comment='是否启用')
|
||||
created_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')
|
||||
last_used = db.Column(db.DateTime, comment='最后使用时间')
|
||||
usage_count = db.Column(db.Integer, default=0, comment='使用次数')
|
||||
|
||||
def __repr__(self):
|
||||
return f'<ApiKey {self.name}>'
|
||||
|
||||
def has_permission(self, permission):
|
||||
"""检查是否拥有指定权限"""
|
||||
if not self.is_active:
|
||||
return False
|
||||
perms = self.permissions.split(',') if self.permissions else []
|
||||
return permission.strip() in [p.strip() for p in perms]
|
||||
|
||||
def to_dict(self, include_key=False):
|
||||
"""转换为字典"""
|
||||
result = {
|
||||
'id': self.id,
|
||||
'name': self.name,
|
||||
'permissions': self.permissions,
|
||||
'is_active': self.is_active,
|
||||
'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else None,
|
||||
'last_used': self.last_used.strftime('%Y-%m-%d %H:%M:%S') if self.last_used else None,
|
||||
'usage_count': self.usage_count
|
||||
}
|
||||
if include_key:
|
||||
result['key'] = self.key
|
||||
return result
|
||||
|
||||
|
||||
class PromptTemplate(db.Model):
|
||||
"""AI提示词模板模型"""
|
||||
__tablename__ = 'prompt_templates'
|
||||
|
||||
Reference in New Issue
Block a user