ref(backend):controlle
This commit is contained in:
@@ -1,14 +1,19 @@
|
||||
import asyncio
|
||||
|
||||
from fastapi import APIRouter
|
||||
from starlette.websockets import WebSocket
|
||||
from websockets.exceptions import WebSocketException
|
||||
|
||||
from core.security import generate_token, verify_password
|
||||
from core.utils import get_system_info
|
||||
from dbhelper.user import get_user
|
||||
from schemas import LoginForm, LoginResult, Response
|
||||
|
||||
router = APIRouter(tags=["公共"])
|
||||
|
||||
async def login(auth_data: LoginForm) -> Response[LoginResult]:
|
||||
|
||||
@router.post("/login", summary="登录", response_model=Response[LoginResult])
|
||||
async def login(auth_data: LoginForm):
|
||||
user_obj = await get_user({"username": auth_data.username, "status__not": 9})
|
||||
if user_obj:
|
||||
if verify_password(auth_data.password, user_obj.password):
|
||||
@@ -20,12 +25,12 @@ async def login(auth_data: LoginForm) -> Response[LoginResult]:
|
||||
return Response(code=400, msg="账号或密码错误")
|
||||
|
||||
|
||||
@router.websocket("/ws", name="系统信息")
|
||||
async def websocket(ws: WebSocket):
|
||||
await ws.accept()
|
||||
try:
|
||||
while True:
|
||||
await asyncio.sleep(1)
|
||||
await ws.send_json(get_system_info())
|
||||
except Exception as e:
|
||||
print("断开了链接", e)
|
||||
except WebSocketException:
|
||||
await ws.close()
|
||||
|
@@ -1,13 +1,20 @@
|
||||
# router service db router+service db
|
||||
from fastapi import APIRouter
|
||||
|
||||
from core.utils import list_to_tree
|
||||
from dbhelper.menu import del_menu, get_menu, get_tree_menu, insert_menu, put_menu
|
||||
from schemas import MenuIn, MenuRead, Response
|
||||
|
||||
router = APIRouter(prefix="/menu", tags=["菜单管理"])
|
||||
|
||||
async def menu_add(data: MenuIn) -> Response[MenuRead]:
|
||||
|
||||
@router.post("", summary="菜单新增", response_model=Response[MenuRead])
|
||||
async def menu_add(data: MenuIn):
|
||||
return Response(data=await insert_menu(data))
|
||||
|
||||
|
||||
async def menu_arr() -> Response:
|
||||
@router.get("", summary="菜单列表", response_model=Response)
|
||||
async def menu_arr():
|
||||
menus = await get_tree_menu()
|
||||
try:
|
||||
data = list_to_tree(menus)
|
||||
@@ -16,7 +23,8 @@ async def menu_arr() -> Response:
|
||||
return Response(data=data)
|
||||
|
||||
|
||||
async def menu_del(pk: int) -> Response:
|
||||
@router.delete("/{pk}", summary="菜单删除", response_model=Response)
|
||||
async def menu_del(pk: int):
|
||||
if await get_menu({"pid": pk}) is not None:
|
||||
return Response(code=400, msg="请先删除子节点")
|
||||
if await del_menu(pk) == 0:
|
||||
@@ -24,7 +32,8 @@ async def menu_del(pk: int) -> Response:
|
||||
return Response()
|
||||
|
||||
|
||||
async def menu_put(pk: int, data: MenuIn) -> Response:
|
||||
@router.put("/{pk}", summary="菜单更新", response_model=Response)
|
||||
async def menu_put(pk: int, data: MenuIn):
|
||||
"""更新菜单"""
|
||||
if await put_menu(pk, data) == 0:
|
||||
return Response(code=400, msg="菜单不存在")
|
||||
|
@@ -1,6 +1,4 @@
|
||||
import json
|
||||
|
||||
from fastapi import Query
|
||||
from fastapi import APIRouter, Query
|
||||
|
||||
from core.utils import list_to_tree
|
||||
from dbhelper.menu import get_menu
|
||||
@@ -14,13 +12,17 @@ from dbhelper.role import (
|
||||
)
|
||||
from schemas import ListAll, Response, RoleIn, RoleInfo, RoleQuery, RoleRead
|
||||
|
||||
router = APIRouter(prefix="/role", tags=["角色管理"])
|
||||
|
||||
async def role_add(data: RoleIn) -> Response[RoleInfo]:
|
||||
|
||||
@router.post("", summary="角色新增", response_model=Response[RoleInfo])
|
||||
async def role_add(data: RoleIn):
|
||||
if result := await new_role(data):
|
||||
return Response(data=result)
|
||||
return Response(code=400, msg="菜单不存在")
|
||||
|
||||
|
||||
@router.get("/{rid}/menu", summary="查询角色拥有权限", response_model=Response)
|
||||
async def role_has_menu(rid: int):
|
||||
"""
|
||||
rid: 角色ID
|
||||
@@ -34,24 +36,26 @@ async def role_has_menu(rid: int):
|
||||
return Response(data=result)
|
||||
|
||||
|
||||
@router.get("", summary="角色列表", response_model=Response[ListAll[list[RoleRead]]])
|
||||
async def role_arr(
|
||||
offset: int = Query(default=1, description="偏移量-页码"),
|
||||
limit: int = Query(default=10, description="数据量"),
|
||||
) -> Response[ListAll[list[RoleRead]]]:
|
||||
):
|
||||
skip = (offset - 1) * limit
|
||||
roles, count = await get_roles(skip, limit)
|
||||
return Response(data=ListAll(total=count, items=roles))
|
||||
|
||||
|
||||
async def role_del(pk: int) -> Response:
|
||||
@router.delete("/{pk}", summary="角色删除", response_model=Response)
|
||||
async def role_del(pk: int):
|
||||
if await del_role(pk) == 0:
|
||||
return Response(code=400, msg="角色不存在")
|
||||
return Response()
|
||||
|
||||
|
||||
async def role_put(pk: int, data: RoleIn) -> Response:
|
||||
@router.put("/{pk}", summary="角色更新", response_model=Response)
|
||||
async def role_put(pk: int, data: RoleIn):
|
||||
"""更新角色"""
|
||||
print(await get_role({"id": pk}))
|
||||
if await get_role({"id": pk}) is None:
|
||||
|
||||
return Response(code=400, msg="角色不存在")
|
||||
@@ -64,7 +68,8 @@ async def role_put(pk: int, data: RoleIn) -> Response:
|
||||
return Response()
|
||||
|
||||
|
||||
async def role_query(query: RoleQuery) -> Response[ListAll[list[RoleRead]]]:
|
||||
@router.post("/query", summary="角色查询", response_model=Response[ListAll[list[RoleRead]]])
|
||||
async def role_query(query: RoleQuery):
|
||||
"""post条件查询角色表"""
|
||||
size = query.limit
|
||||
skip = (query.offset - 1) * size
|
||||
|
@@ -1,7 +1,6 @@
|
||||
from fastapi import Depends, Query
|
||||
from starlette.requests import Request
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
|
||||
from core.security import check_token, get_password_hash
|
||||
from core.security import check_permissions, get_password_hash
|
||||
from dbhelper.user import (
|
||||
del_user,
|
||||
get_user,
|
||||
@@ -14,8 +13,11 @@ from dbhelper.user import (
|
||||
from schemas import Response, UserAdd, UserInfo, UserPut, UserQuery, UserRead
|
||||
from schemas.common import ListAll
|
||||
|
||||
router = APIRouter(prefix="/user", tags=["用户管理"])
|
||||
|
||||
async def user_add(data: UserAdd) -> Response[UserRead]:
|
||||
|
||||
@router.post("", summary="用户新增", response_model=Response[UserRead])
|
||||
async def user_add(data: UserAdd):
|
||||
"""新增用户并分配角色 一步到位"""
|
||||
if await get_user({"username": data.username}) is not None:
|
||||
return Response(code=400, msg="用户名已存在")
|
||||
@@ -28,7 +30,8 @@ async def user_add(data: UserAdd) -> Response[UserRead]:
|
||||
return Response(data=result)
|
||||
|
||||
|
||||
async def user_info(pk: int) -> Response[UserInfo]:
|
||||
@router.get("/{pk}", summary="用户信息", response_model=Response[UserInfo])
|
||||
async def user_info(pk: int):
|
||||
"""获取用户信息"""
|
||||
obj = await get_user({"id": pk})
|
||||
if obj is None:
|
||||
@@ -36,17 +39,19 @@ async def user_info(pk: int) -> Response[UserInfo]:
|
||||
return Response(data=await get_user_info(obj))
|
||||
|
||||
|
||||
@router.get("", summary="用户列表", response_model=Response[ListAll[list[UserRead]]])
|
||||
async def user_arr(
|
||||
offset: int = Query(default=1, description="偏移量-页码"),
|
||||
limit: int = Query(default=10, description="数据量"),
|
||||
) -> Response[ListAll[list[UserRead]]]:
|
||||
):
|
||||
"""分页列表数据"""
|
||||
skip = (offset - 1) * limit
|
||||
users, count = await get_users(skip, limit)
|
||||
return Response(data=ListAll(total=count, items=users))
|
||||
|
||||
|
||||
async def user_list(query: UserQuery) -> Response[ListAll[list[UserRead]]]:
|
||||
@router.post("/query", summary="用户查询", response_model=Response[ListAll[list[UserRead]]])
|
||||
async def user_list(query: UserQuery):
|
||||
"""post查询用户列表"""
|
||||
size = query.limit
|
||||
skip = (query.offset - 1) * size
|
||||
@@ -55,14 +60,16 @@ async def user_list(query: UserQuery) -> Response[ListAll[list[UserRead]]]:
|
||||
return Response(data=ListAll(total=count, items=users))
|
||||
|
||||
|
||||
async def user_del(pk: int) -> Response:
|
||||
@router.delete("/{pk}", summary="用户删除", response_model=Response)
|
||||
async def user_del(pk: int):
|
||||
"""删除用户"""
|
||||
if await del_user(pk) == 0:
|
||||
return Response(code=400, msg="用户不存在")
|
||||
return Response()
|
||||
|
||||
|
||||
async def user_put(pk: int, data: UserPut) -> Response:
|
||||
@router.put("/{pk}", summary="用户更新", response_model=Response)
|
||||
async def user_put(pk: int, data: UserPut):
|
||||
"""更新用户"""
|
||||
if await get_user({"id": pk}) is None:
|
||||
return Response(code=400, msg="用户不存在")
|
||||
@@ -73,7 +80,8 @@ async def user_put(pk: int, data: UserPut) -> Response:
|
||||
return Response()
|
||||
|
||||
|
||||
async def user_select_role(rid: int, user=Depends(check_token)):
|
||||
@router.put("/role/{rid}", summary="用户切换角色", response_model=Response)
|
||||
async def user_select_role(rid: int, user=Depends(check_permissions)):
|
||||
"""用户切换角色"""
|
||||
res = await select_role(user.id, rid)
|
||||
if res == 0:
|
||||
|
Reference in New Issue
Block a user