feat: role & menu api

This commit is contained in:
zy7y
2022-09-12 23:22:18 +08:00
parent f27d2e9f7c
commit 8e154d492a
18 changed files with 701 additions and 270 deletions

View File

@@ -1,17 +1 @@
from fastapi import Depends, FastAPI
from core.security import check_token
def register_routers(app: FastAPI):
from controller.common import common
from controller.menu import menu
from controller.role import role
from controller.user import user
app.include_router(router=common)
app.include_router(
router=user,
)
app.include_router(router=menu)
app.include_router(router=role)

View File

@@ -4,7 +4,7 @@ from schemas import LoginForm, LoginResult, Response
async def login(auth_data: LoginForm) -> Response[LoginResult]:
user_obj = await get_user({"username": auth_data.username})
user_obj = await get_user({"username": auth_data.username, "status__not": 9})
if user_obj:
if verify_password(auth_data.password, user_obj.password):
return Response(
@@ -12,4 +12,9 @@ async def login(auth_data: LoginForm) -> Response[LoginResult]:
id=user_obj.id, token=generate_token(auth_data.username)
)
)
return Response(msg="账号或密码错误")
return Response(code=400, msg="账号或密码错误")
async def about() -> Response:
"""关于"""
pass

View File

@@ -1,6 +1,23 @@
from dbhelper.menu import insert_menu
from schemas import MenuIn, MenuRead, Response
from fastapi import Query
from dbhelper.menu import del_menu, get_menus, insert_menu
from schemas import ListAll, MenuIn, MenuRead, Response
async def menu_add(data: MenuIn) -> Response[MenuRead]:
return Response(data=await insert_menu(data))
async def menu_arr(
offset: int = Query(default=1, description="偏移量"),
limit: int = Query(default=10, description="数量"),
) -> Response[ListAll[list[MenuRead]]]:
skip = (offset - 1) * limit
menus, count = await get_menus(skip, limit)
return Response(data=ListAll(total=count, items=menus))
async def menu_del(pk: int) -> Response:
if await del_menu(pk) == 0:
return Response(code=400, msg="菜单不存在")
return Response()

View File

@@ -1,8 +1,18 @@
import json
from fastapi import Query
from core.utils import list_to_tree
from dbhelper.role import get_role_menus, new_role
from schemas import Response, RoleIn, RoleInfo
from dbhelper.relation import role_assigned_menu
from dbhelper.role import (
del_role,
get_role,
get_role_menus,
get_roles,
new_role,
put_role,
)
from schemas import ListAll, Response, RoleIn, RoleInfo, RoleMenuIn, RoleQuery, RoleRead
async def role_add(data: RoleIn) -> Response[RoleInfo]:
@@ -17,3 +27,43 @@ async def role_has_menu(rid: int):
for obj in menus:
obj["meta"] = json.loads(obj["meta"]) if obj["meta"] is not None else None
return Response(data=list_to_tree(menus))
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 assigned_menu(data: RoleMenuIn) -> Response:
"""分配菜单给角色"""
if await get_role({"id": data.rid, "status__not": 9}) is None:
return Response(code=400, msg="角色不存在")
if isinstance(await role_assigned_menu(data), int):
return Response(code=400, msg=f"菜单不存在")
return Response()
async def role_del(pk: int) -> Response:
if await del_role(pk) == 0:
return Response(code=400, msg="角色不存在")
return Response()
async def role_put(pk: int, data: RoleIn) -> Response:
"""更新角色"""
if await put_role(pk, data) == 0:
return Response(code=400, msg="角色不存在")
return Response()
async def role_query(query: RoleQuery) -> Response[ListAll[list[RoleRead]]]:
"""post条件查询角色表"""
limit = query.size
skip = (query.offset - 1) * limit
del query.offset, query.size
users, count = await get_roles(skip, limit, query.dict())
return Response(data=ListAll(total=count, items=users))

View File

@@ -1,48 +1,71 @@
from fastapi import Query
from core.security import get_password_hash
from dbhelper.user import get_user, get_user_info, get_users, insert_user, new_user
from schemas import Response, UserAdd, UserIn, UserInfo, UserList, UserQuery, UserRead
from dbhelper.user import (
del_user,
get_user,
get_user_info,
get_users,
insert_user,
put_user,
)
from schemas import Response, UserAdd, UserInfo, UserPut, UserQuery, UserRead
from schemas.common import ListAll
async def user_add(data: UserAdd) -> Response[UserInfo]:
async def user_add(data: UserAdd) -> Response[UserRead]:
"""新增用户并分配角色 一步到位"""
if await get_user({"username": data.username}) is not None:
return Response(code=400, msg="用户名已存在")
roles = data.rids
del data.rids
data.password = get_password_hash(data.password)
return await insert_user(data, roles)
async def create_user(data: UserIn) -> Response[UserRead]:
"""新增用户"""
result = await get_user({"username": data.username})
if result is None:
data.password = get_password_hash(data.password)
return Response(data=await new_user(data))
return Response(msg="用户名已存在")
result = await insert_user(data, roles)
if isinstance(result, int):
return Response(code=400, msg=f"角色{result}不存在")
return Response(data=result)
async def user_info(pk: int) -> Response[UserInfo]:
try:
return Response(data=await get_user_info(pk))
except Exception as e:
return Response(msg=f"用户不存在 {e}")
"""获取用户信息"""
obj = await get_user({"id": pk})
if obj is None:
return Response(code=400, msg="用户不存在")
return Response(data=await get_user_info(obj))
async def user_arr(
offset: int = Query(default=1, description="偏移量-页码"),
limit: int = Query(default=10, description="数据量"),
) -> Response[ListAll[UserList]]:
) -> 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[UserList]]:
async def user_list(query: UserQuery) -> Response[ListAll[list[UserRead]]]:
"""post查询用户列表"""
limit = query.size
skip = (query.offset - 1) * limit
del query.offset, query.size
users, count = await get_users(skip, limit, query.dict())
return Response(data=ListAll(total=count, items=users))
async def user_del(pk: int) -> Response:
"""删除用户"""
if await del_user(pk) == 0:
return Response(code=400, msg="用户不存在")
return Response()
async def user_put(pk: int, data: UserPut) -> Response:
"""更新用户"""
if await get_user({"id": pk}) is None:
return Response(code=400, msg="用户不存在")
result = await put_user(pk, data)
if isinstance(result, int):
return Response(code=400, msg=f"角色不存在{result}")
return Response()