|
|
@@ -333,15 +333,7 @@ async def api_get_all_menus(
|
|
|
timestamp=datetime.now(timezone.utc).isoformat()
|
|
|
).model_dump()
|
|
|
|
|
|
- # 简化权限检查 - 只检查是否为管理员
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(
|
|
|
- code=403,
|
|
|
- message="权限不足",
|
|
|
- timestamp=datetime.now(timezone.utc).isoformat()
|
|
|
- ).model_dump()
|
|
|
-
|
|
|
+
|
|
|
# 调用 service 层
|
|
|
system_service = SystemService()
|
|
|
menus, total = await system_service.get_all_menus(page, page_size, keyword)
|
|
|
@@ -386,15 +378,6 @@ async def api_get_all_roles(
|
|
|
timestamp=datetime.now(timezone.utc).isoformat()
|
|
|
).model_dump()
|
|
|
|
|
|
- # 简化权限检查 - 只检查是否为管理员
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(
|
|
|
- code=403,
|
|
|
- message="权限不足",
|
|
|
- timestamp=datetime.now(timezone.utc).isoformat()
|
|
|
- ).model_dump()
|
|
|
-
|
|
|
# 调用 service 层
|
|
|
system_service = SystemService()
|
|
|
roles, total = await system_service.get_all_roles(page , page_size , keyword)
|
|
|
@@ -473,9 +456,6 @@ async def get_users(
|
|
|
if not payload:
|
|
|
return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(code=403, message="权限不足", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
|
|
|
# 调用 service 层
|
|
|
system_service_ext = SystemServiceExt()
|
|
|
@@ -531,6 +511,32 @@ async def create_user(
|
|
|
return ApiResponse(code=500, message="服务器内部错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
|
|
|
|
|
|
+@router.get("/admin/users/{user_id}")
|
|
|
+async def get_user_detail(
|
|
|
+ user_id: str,
|
|
|
+ credentials: HTTPAuthorizationCredentials = Depends(security)
|
|
|
+):
|
|
|
+ """获取用户详情"""
|
|
|
+ try:
|
|
|
+ payload = verify_token(credentials.credentials)
|
|
|
+ if not payload:
|
|
|
+ return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
+
|
|
|
+
|
|
|
+ # 调用 service 层获取用户详情
|
|
|
+ system_service_ext = SystemServiceExt()
|
|
|
+ user_detail = await system_service_ext.get_user_detail(user_id)
|
|
|
+
|
|
|
+ if user_detail:
|
|
|
+ return ApiResponse(code=0, data=user_detail, message="Success", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
+ else:
|
|
|
+ return ApiResponse(code=404, message="用户不存在", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ logger.exception("获取用户详情错误")
|
|
|
+ return ApiResponse(code=500, message="服务器内部错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
@@ -546,14 +552,13 @@ async def update_user(
|
|
|
if not payload:
|
|
|
return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(code=403, message="权限不足", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
|
|
|
updater_id = payload.get("sub")
|
|
|
- # 创建密码哈希
|
|
|
- password_hash = hash_password_simple(user_data['password'])
|
|
|
- user_data['password'] = password_hash
|
|
|
+
|
|
|
+ # 只有当密码不为空时才进行哈希处理
|
|
|
+ if user_data.get('password'):
|
|
|
+ password_hash = hash_password_simple(user_data['password'])
|
|
|
+ user_data['password'] = password_hash
|
|
|
|
|
|
# 调用 service 层
|
|
|
system_service_ext = SystemServiceExt()
|
|
|
@@ -620,13 +625,10 @@ async def create_role(
|
|
|
if not payload:
|
|
|
return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(code=403, message="权限不足", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
+ current_user_id = payload.get("sub")
|
|
|
# 调用 service 层
|
|
|
system_service = SystemService()
|
|
|
- success, message = await system_service.create_role(role_data)
|
|
|
+ success, message = await system_service.create_role(role_data , current_user_id)
|
|
|
|
|
|
if success:
|
|
|
return ApiResponse(code=0, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
@@ -654,10 +656,10 @@ async def update_role(
|
|
|
is_superuser = payload.get("is_superuser", False)
|
|
|
if not is_superuser:
|
|
|
return ApiResponse(code=403, message="权限不足", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
+ user_id = payload.get("sub")
|
|
|
# 调用 service 层
|
|
|
system_service = SystemService()
|
|
|
- success, message = await system_service.update_role(role_id, role_data)
|
|
|
+ success, message = await system_service.update_role(role_id, role_data , user_id)
|
|
|
|
|
|
if success:
|
|
|
return ApiResponse(code=0, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
@@ -715,14 +717,6 @@ async def get_role_menus(
|
|
|
timestamp=datetime.now(timezone.utc).isoformat()
|
|
|
).model_dump()
|
|
|
|
|
|
- # 检查管理员权限
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(
|
|
|
- code=403,
|
|
|
- message="权限不足",
|
|
|
- timestamp=datetime.now(timezone.utc).isoformat()
|
|
|
- ).model_dump()
|
|
|
|
|
|
# 调用 service 层
|
|
|
system_service = SystemService()
|
|
|
@@ -767,14 +761,6 @@ async def update_role_menus(
|
|
|
timestamp=datetime.now(timezone.utc).isoformat()
|
|
|
).model_dump()
|
|
|
|
|
|
- # 检查管理员权限
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(
|
|
|
- code=403,
|
|
|
- message="权限不足",
|
|
|
- timestamp=datetime.now(timezone.utc).isoformat()
|
|
|
- ).model_dump()
|
|
|
|
|
|
# 获取请求数据
|
|
|
body = await request.json()
|
|
|
@@ -1278,289 +1264,3 @@ def generate_random_string(length=32):
|
|
|
import string
|
|
|
alphabet = string.ascii_letters + string.digits
|
|
|
return ''.join(secrets.choice(alphabet) for _ in range(length))
|
|
|
-
|
|
|
-### 2. 获取所有角色
|
|
|
-@router.get("/admin/roles")
|
|
|
-async def api_get_all_roles(
|
|
|
- page: int = 1,
|
|
|
- page_size: int = 20,
|
|
|
- keyword: Optional[str] = None,
|
|
|
- credentials: HTTPAuthorizationCredentials = Depends(security)
|
|
|
-):
|
|
|
- """获取所有角色"""
|
|
|
- try:
|
|
|
- payload = verify_token(credentials.credentials)
|
|
|
- if not payload:
|
|
|
- return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(code=403, message="权限不足", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- # 调用 service 层
|
|
|
- system_service = SystemService()
|
|
|
- roles, total = await system_service.get_all_roles(page, page_size, keyword)
|
|
|
-
|
|
|
- return ApiResponse(
|
|
|
- code=0,
|
|
|
- message="获取角色列表成功",
|
|
|
- data={"items": roles, "total": total, "page": page, "page_size": page_size},
|
|
|
- timestamp=datetime.now(timezone.utc).isoformat()
|
|
|
- ).model_dump()
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- logger.exception("获取角色列表错误")
|
|
|
- return ApiResponse(code=500, message="服务器内部错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-### 5. 创建用户
|
|
|
-@router.post("/admin/users")
|
|
|
-async def create_user(
|
|
|
- user_data: dict,
|
|
|
- credentials: HTTPAuthorizationCredentials = Depends(security)
|
|
|
-):
|
|
|
- """创建用户"""
|
|
|
- try:
|
|
|
- payload = verify_token(credentials.credentials)
|
|
|
- if not payload:
|
|
|
- return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(code=403, message="权限不足", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- # 创建密码哈希
|
|
|
- system_service = SystemService()
|
|
|
- password_hash = system_service._hash_password(user_data['password'])
|
|
|
-
|
|
|
- # 调用 service 层
|
|
|
- system_service_ext = SystemServiceExt()
|
|
|
- success, message = await system_service_ext.create_user(user_data, password_hash, payload.get("sub"))
|
|
|
-
|
|
|
- if success:
|
|
|
- return ApiResponse(code=0, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
- else:
|
|
|
- return ApiResponse(code=400, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- logger.exception("创建用户错误")
|
|
|
- return ApiResponse(code=500, message="服务器内部错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-### 6. 更新用户
|
|
|
-@router.put("/admin/users/{user_id}")
|
|
|
-async def update_user(
|
|
|
- user_id: str,
|
|
|
- user_data: dict,
|
|
|
- credentials: HTTPAuthorizationCredentials = Depends(security)
|
|
|
-):
|
|
|
- """更新用户"""
|
|
|
- try:
|
|
|
- payload = verify_token(credentials.credentials)
|
|
|
- if not payload:
|
|
|
- return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(code=403, message="权限不足", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- # 调用 service 层
|
|
|
- system_service_ext = SystemServiceExt()
|
|
|
- success, message = await system_service_ext.update_user(user_id, user_data, payload.get("sub"))
|
|
|
-
|
|
|
- if success:
|
|
|
- return ApiResponse(code=0, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
- else:
|
|
|
- return ApiResponse(code=400, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- logger.exception("更新用户错误")
|
|
|
- return ApiResponse(code=500, message="服务器内部错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-### 7. 删除用户
|
|
|
-@router.delete("/admin/users/{user_id}")
|
|
|
-async def delete_user(
|
|
|
- user_id: str,
|
|
|
- credentials: HTTPAuthorizationCredentials = Depends(security)
|
|
|
-):
|
|
|
- """删除用户"""
|
|
|
- try:
|
|
|
- payload = verify_token(credentials.credentials)
|
|
|
- if not payload:
|
|
|
- return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(code=403, message="权限不足", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- # 调用 service 层
|
|
|
- system_service_ext = SystemServiceExt()
|
|
|
- success, message = await system_service_ext.delete_user(user_id, payload.get("sub"))
|
|
|
-
|
|
|
- if success:
|
|
|
- return ApiResponse(code=0, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
- else:
|
|
|
- return ApiResponse(code=400, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- logger.exception("删除用户错误")
|
|
|
- return ApiResponse(code=500, message="服务器内部错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-### 8. 创建角色
|
|
|
-@router.post("/admin/roles")
|
|
|
-async def create_role(
|
|
|
- role_data: dict,
|
|
|
- credentials: HTTPAuthorizationCredentials = Depends(security)
|
|
|
-):
|
|
|
- """创建角色"""
|
|
|
- try:
|
|
|
- payload = verify_token(credentials.credentials)
|
|
|
- if not payload:
|
|
|
- return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(code=403, message="权限不足", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- # 调用 service 层
|
|
|
- system_service = SystemService()
|
|
|
- success, message = await system_service.create_role(role_data)
|
|
|
-
|
|
|
- if success:
|
|
|
- return ApiResponse(code=0, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
- else:
|
|
|
- return ApiResponse(code=400, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- logger.exception("创建角色错误")
|
|
|
- return ApiResponse(code=500, message="服务器内部错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
-### 9. 获取角色菜单权限
|
|
|
-@router.get("/admin/roles/{role_id}/menus")
|
|
|
-async def get_role_menus(
|
|
|
- role_id: str,
|
|
|
- credentials: HTTPAuthorizationCredentials = Depends(security)
|
|
|
-):
|
|
|
- """获取角色的菜单权限"""
|
|
|
- try:
|
|
|
- payload = verify_token(credentials.credentials)
|
|
|
- if not payload:
|
|
|
- return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(code=403, message="权限不足", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- # 调用 service 层
|
|
|
- system_service = SystemService()
|
|
|
- success, data, message = await system_service.get_role_menus(role_id)
|
|
|
-
|
|
|
- if success:
|
|
|
- return ApiResponse(code=0, message=message, data=data, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
- else:
|
|
|
- return ApiResponse(code=404 if "不存在" in message else 500, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- logger.exception("获取角色菜单权限错误")
|
|
|
- return ApiResponse(code=500, message="服务器内部错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
-
|
|
|
-### 10. 更新角色菜单权限
|
|
|
-
|
|
|
-@router.put("/admin/roles/{role_id}/menus")
|
|
|
-async def update_role_menus(
|
|
|
- role_id: str,
|
|
|
- request: Request,
|
|
|
- credentials: HTTPAuthorizationCredentials = Depends(security)
|
|
|
-):
|
|
|
- """更新角色的菜单权限"""
|
|
|
- try:
|
|
|
- payload = verify_token(credentials.credentials)
|
|
|
- if not payload:
|
|
|
- return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- is_superuser = payload.get("is_superuser", False)
|
|
|
- if not is_superuser:
|
|
|
- return ApiResponse(code=403, message="权限不足", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- # 获取请求数据
|
|
|
- body = await request.json()
|
|
|
- menu_ids = body.get("menu_ids", [])
|
|
|
-
|
|
|
- if not isinstance(menu_ids, list):
|
|
|
- return ApiResponse(code=400, message="菜单ID列表格式错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- # 调用 service 层
|
|
|
- system_service = SystemService()
|
|
|
- success, data, message = await system_service.update_role_menus(role_id, menu_ids)
|
|
|
-
|
|
|
- if success:
|
|
|
- return ApiResponse(code=0, message=message, data=data, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
- else:
|
|
|
- return ApiResponse(code=400, message=message, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- logger.exception("更新角色菜单权限错误")
|
|
|
- return ApiResponse(code=500, message="服务器内部错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
-### 11. 获取所有角色(简化版)
|
|
|
-
|
|
|
-@router.get("/roles/all")
|
|
|
-async def get_all_roles_simple(credentials: HTTPAuthorizationCredentials = Depends(security)):
|
|
|
- """获取所有角色(简化版,用于下拉选择)"""
|
|
|
- try:
|
|
|
- payload = verify_token(credentials.credentials)
|
|
|
- if not payload:
|
|
|
- return ApiResponse(code=401, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- # 调用 service 层
|
|
|
- system_service = SystemService()
|
|
|
- roles = await system_service.get_all_roles_simple()
|
|
|
-
|
|
|
- return ApiResponse(code=0, message="获取角色列表成功", data=roles, timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- logger.exception("获取角色列表错误")
|
|
|
- return ApiResponse(code=500, message="服务器内部错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
-
|
|
|
-### 12. 获取应用列表
|
|
|
-@router.get("/apps")
|
|
|
-async def get_apps(
|
|
|
- page: int = 1,
|
|
|
- page_size: int = 20,
|
|
|
- keyword: str = "",
|
|
|
- status: str = "",
|
|
|
- credentials: HTTPAuthorizationCredentials = Depends(security)
|
|
|
-):
|
|
|
- """获取应用列表"""
|
|
|
- try:
|
|
|
- payload = verify_token(credentials.credentials)
|
|
|
- if not payload:
|
|
|
- return ApiResponse(code=200002, message="无效的访问令牌", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|
|
|
-
|
|
|
- user_id = payload.get("sub")
|
|
|
-
|
|
|
- # 检查用户角色
|
|
|
- system_service_ext = SystemServiceExt()
|
|
|
- is_app_manager = await system_service_ext.check_user_app_manager_role(user_id)
|
|
|
-
|
|
|
- # 调用 service 层
|
|
|
- apps, total = await system_service_ext.get_apps(page, page_size, user_id, is_app_manager, keyword, status)
|
|
|
-
|
|
|
- return ApiResponse(
|
|
|
- code=0,
|
|
|
- message="获取应用列表成功",
|
|
|
- data={"items": apps, "total": total, "page": page, "page_size": page_size},
|
|
|
- timestamp=datetime.now(timezone.utc).isoformat()
|
|
|
- ).model_dump()
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- logger.exception("获取应用列表错误")
|
|
|
- return ApiResponse(code=500001, message="服务器内部错误", timestamp=datetime.now(timezone.utc).isoformat()).model_dump()
|