mini-rbac/backend/controller/role.py

70 lines
2.0 KiB
Python
Raw Normal View History

2022-09-11 10:34:18 +00:00
import json
2022-09-12 15:22:18 +00:00
from fastapi import Query
2022-09-11 10:34:18 +00:00
from core.utils import list_to_tree
2022-09-12 15:22:18 +00:00
from dbhelper.relation import role_assigned_menu
2022-09-13 16:39:19 +00:00
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
2022-09-11 10:34:18 +00:00
2022-09-12 07:11:12 +00:00
async def role_add(data: RoleIn) -> Response[RoleInfo]:
return Response(data=await new_role(data))
2022-09-11 10:34:18 +00:00
2022-09-12 07:11:12 +00:00
async def role_has_menu(rid: int):
"""
rid: 角色ID
"""
menus = await get_role_menus(rid)
2022-09-11 10:34:18 +00:00
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))
2022-09-12 15:22:18 +00:00
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))