feat: role & menu api
This commit is contained in:
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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()
|
||||
|
@@ -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))
|
||||
|
@@ -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()
|
||||
|
Reference in New Issue
Block a user