- 实现AI多视角设计图生成功能,支持6个可选设计参数配置 - 集成SiliconFlow FLUX.1与火山引擎Seedream 4.5双模型切换 - 构建专业中文转英文prompt系统,提升AI生成质量 - 前端设计预览支持多视角切换与视角指示器展示 - 增加多视角设计图片DesignImage模型关联及存储 - 后端设计服务异步调用AI接口,失败时降级生成mock图 - 新增管理员后台管理路由及完整的权限校验机制 - 实现后台模块:仪表盘、系统配置、用户/品类/设计管理 - 配置数据库系统配置表,支持动态AI配置及热更新 - 增加用户管理员标识字段,管理后台登录鉴权支持 - 更新API接口支持多视角设计参数及后台管理接口 - 优化设计删除逻辑,删除多视角相关图片文件 - 前端新增管理后台页面与路由,布局样式独立分离 - 更新环境变量增加AI模型相关Key与参数配置说明 - 引入httpx异步HTTP客户端用于AI接口调用及图片下载 - README文档完善AI多视角生图与后台管理详细功能与流程说明
75 lines
1.9 KiB
Python
75 lines
1.9 KiB
Python
"""
|
||
认证依赖注入
|
||
提供用户认证相关的 FastAPI 依赖
|
||
"""
|
||
from fastapi import Depends, HTTPException, status
|
||
from fastapi.security import OAuth2PasswordBearer
|
||
from jose import JWTError, jwt
|
||
from sqlalchemy.orm import Session
|
||
|
||
from ..config import settings
|
||
from ..database import get_db
|
||
from ..models.user import User
|
||
|
||
|
||
# OAuth2 密码认证方案,tokenUrl 指向登录接口
|
||
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/auth/login")
|
||
|
||
|
||
def get_current_user(
|
||
token: str = Depends(oauth2_scheme),
|
||
db: Session = Depends(get_db)
|
||
) -> User:
|
||
"""
|
||
获取当前登录用户
|
||
|
||
从 JWT token 中解析用户 ID,查询数据库返回用户对象
|
||
|
||
Args:
|
||
token: JWT access token
|
||
db: 数据库会话
|
||
|
||
Returns:
|
||
当前登录的用户对象
|
||
|
||
Raises:
|
||
HTTPException: token 无效或用户不存在时抛出 401
|
||
"""
|
||
credentials_exception = HTTPException(
|
||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||
detail="无法验证凭据",
|
||
headers={"WWW-Authenticate": "Bearer"},
|
||
)
|
||
|
||
try:
|
||
# 解码 JWT token
|
||
payload = jwt.decode(token, settings.SECRET_KEY, algorithms=[settings.ALGORITHM])
|
||
user_id: str = payload.get("sub")
|
||
if user_id is None:
|
||
raise credentials_exception
|
||
except JWTError:
|
||
raise credentials_exception
|
||
|
||
# 从数据库查询用户
|
||
user = db.query(User).filter(User.id == int(user_id)).first()
|
||
if user is None:
|
||
raise credentials_exception
|
||
|
||
return user
|
||
|
||
|
||
def get_admin_user(
|
||
current_user: User = Depends(get_current_user)
|
||
) -> User:
|
||
"""
|
||
获取当前管理员用户
|
||
|
||
验证当前用户是否为管理员,非管理员抛出 403
|
||
"""
|
||
if not current_user.is_admin:
|
||
raise HTTPException(
|
||
status_code=status.HTTP_403_FORBIDDEN,
|
||
detail="权限不足,需要管理员权限"
|
||
)
|
||
return current_user
|