login page

This commit is contained in:
zy7y
2022-09-11 18:34:18 +08:00
commit a1c23c8cf8
52 changed files with 4149 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
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

@@ -0,0 +1,16 @@
from core.resp import Response
from core.router import Router
from core.security import generate_token, verify_password
from dbhelper.user import get_user
from schemas.common import LoginForm, LoginResult
common = Router(tags=["公共接口"])
@common.post("/login", summary="登录")
async def login(auth_data: LoginForm) -> Response[LoginResult]:
user_obj = await get_user({"username": auth_data.username})
if user_obj:
if verify_password(auth_data.password, user_obj.password):
return dict(id=user_obj.id, access_token=generate_token(user_obj.username))
return Response(msg="账号或密码错误")

View File

@@ -0,0 +1,31 @@
from core.resp import Response
from core.router import Router
from schemas.common import QueryData
from schemas.menu import MenuIn, MenuRead
menu = Router(prefix="/menu", tags=["菜单管理"])
@menu.post("", summary="菜单添加")
async def menu_add(data: MenuIn) -> Response[MenuRead]:
pass
@menu.get("/{pk}", summary="菜单详情")
async def menu_info(pk: int) -> Response[MenuRead]:
pass
@menu.delete("/{pk}", summary="删除菜单")
async def menu_del(pk: int) -> Response:
pass
@menu.put("/{pk}", summary="编辑菜单")
async def menu_put(pk: int, data: MenuIn) -> Response[MenuRead]:
pass
@menu.post("/list", summary="查询菜单列表")
async def menu_list(data: QueryData) -> Response[list[MenuRead]]:
pass

View File

@@ -0,0 +1,53 @@
import json
from core.resp import Response
from core.router import Router
from core.utils import list_to_tree
from dbhelper.role import get_role_menus
from schemas.common import QueryData
from schemas.role import RoleAdd, RoleInfo
role = Router(prefix="/role", tags=["角色管理"])
@role.post("", summary="角色添加")
async def role_add(data: RoleAdd) -> Response[RoleInfo]:
pass
@role.get("/{pk}", summary="角色详情")
async def role_info(pk: int) -> Response[RoleInfo]:
pass
@role.delete("/{pk}", summary="删除角色")
async def role_del(pk: int) -> Response:
pass
@role.put("/{pk}", summary="编辑角色")
async def role_put(pk: int, data: RoleAdd) -> Response[RoleInfo]:
pass
@role.post("/list", summary="查询角色列表")
async def role_list(data: QueryData) -> Response[list[RoleInfo]]:
pass
@role.get("/{pk}/menu", summary="查询角色菜单权限")
async def role_menu(pk: int):
menus = await get_role_menus(pk)
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))
@role.get("/{pk}/menuIds", summary="查询角色菜单ids")
async def role_menus_id():
pass
@role.get("/assign", summary="分配权限")
async def role_assign():
pass

View File

@@ -0,0 +1,41 @@
from core.resp import Response
from core.router import Router
from dbhelper.user import get_user_info, get_users, insert_user
from schemas.common import ListAll
from schemas.user import UserAdd, UserInfo, UserList, UserQuery
user = Router(prefix="/users", tags=["用户管理"])
@user.post("", summary="用户添加")
async def user_add(data: UserAdd) -> Response[UserInfo]:
roles = data.rids
del data.rids
return await insert_user(data, roles)
@user.get("/{pk}", summary="用户详情")
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}")
@user.delete("/{pk}", summary="删除用户")
async def user_del(pk: int) -> Response:
pass
@user.put("/{pk}", summary="编辑用户")
async def user_put(pk: int, data: UserAdd) -> Response[UserInfo]:
pass
@user.post("/list", summary="查询用户列表")
async def user_list(query: UserQuery) -> Response[ListAll[UserList]]:
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))