PingWatch 网络设备离线监控系统
- FastAPI 后端 + Vue 3 前端 - Docker Compose 一键部署 - Casdoor OAuth 认证集成 - LogHive 集中式日志 - 设备批量 CSV 导入/导出 - WebSocket 实时状态推送 - 企业微信告警通知 - fping 高性能并发 Ping 检测 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
"""用户管理 API(管理员)"""
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from pydantic import BaseModel
|
||||
from sqlalchemy import select, update
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.core.deps import get_db
|
||||
from app.core.auth import get_current_user, require_admin
|
||||
from app.models.user import User, UserRoleEnum
|
||||
|
||||
router = APIRouter(prefix="/api/users", tags=["用户管理"])
|
||||
|
||||
|
||||
@router.get("")
|
||||
async def list_users(
|
||||
db: AsyncSession = Depends(get_db),
|
||||
admin: User = Depends(require_admin),
|
||||
):
|
||||
"""获取所有用户"""
|
||||
result = await db.execute(select(User).order_by(User.id))
|
||||
users = result.scalars().all()
|
||||
return [
|
||||
{
|
||||
"id": u.id,
|
||||
"username": u.username,
|
||||
"display_name": u.display_name,
|
||||
"role": u.role.value,
|
||||
"is_active": u.is_active,
|
||||
"last_login_at": u.last_login_at,
|
||||
"created_at": u.created_at,
|
||||
}
|
||||
for u in users
|
||||
]
|
||||
|
||||
|
||||
class UpdateUserRoleRequest(BaseModel):
|
||||
role: str # "admin" or "viewer"
|
||||
|
||||
|
||||
|
||||
@router.put("/{user_id}/role")
|
||||
async def update_user_role(
|
||||
user_id: int,
|
||||
data: UpdateUserRoleRequest,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
admin: User = Depends(require_admin),
|
||||
):
|
||||
"""更新用户角色"""
|
||||
if data.role not in ("admin", "viewer"):
|
||||
raise HTTPException(status_code=400, detail="无效角色")
|
||||
if user_id == admin.id:
|
||||
raise HTTPException(status_code=400, detail="不能修改自己的角色")
|
||||
|
||||
new_role = UserRoleEnum.admin if data.role == "admin" else UserRoleEnum.viewer
|
||||
await db.execute(update(User).where(User.id == user_id).values(role=new_role))
|
||||
await db.commit()
|
||||
return {"message": "更新成功"}
|
||||
Reference in New Issue
Block a user