feat: 切换角色

This commit is contained in:
zy7y
2022-09-14 00:39:19 +08:00
parent 9766950106
commit d79b39b7eb
18 changed files with 255 additions and 50 deletions

View File

@@ -28,4 +28,3 @@ async def menu_put(pk: int, data: MenuIn) -> Response:
if await put_menu(pk, data) == 0:
return Response(code=400, msg="菜单不存在")
return Response()

View File

@@ -4,10 +4,15 @@ from fastapi import Query
from core.utils import list_to_tree
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)
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]:

View File

@@ -1,8 +1,16 @@
from fastapi import Query
from fastapi import Depends, Query
from starlette.requests import Request
from core.security import get_password_hash
from dbhelper.user import (del_user, get_user, get_user_info, get_users,
insert_user, put_user)
from core.security import check_token, get_password_hash
from dbhelper.user import (
del_user,
get_user,
get_user_info,
get_users,
insert_user,
put_user,
select_role,
)
from schemas import Response, UserAdd, UserInfo, UserPut, UserQuery, UserRead
from schemas.common import ListAll
@@ -63,3 +71,11 @@ async def user_put(pk: int, data: UserPut) -> Response:
if isinstance(result, int):
return Response(code=400, msg=f"角色不存在{result}")
return Response()
async def user_select_role(rid: int, user=Depends(check_token)):
"""用户切换角色"""
res = await select_role(user.id, rid)
if res == 0:
return Response(code=400, msg=f"角色不存在{res}")
return Response()

View File

@@ -74,7 +74,7 @@ async def check_permissions(request: Request, user: UserModel = Depends(check_to
whitelist = [f"/user/{user.id}", f"/role/{active_rid}/menu"]
flag = request.url.path in whitelist and request.method == "GET"
if flag:
return
return user
api = request.url.path
for k, v in request.path_params.items():

View File

@@ -71,4 +71,4 @@ async def get_apis(pk: int):
async def put_menu(pk: int, data):
"""更新菜单"""
return await MenuModel.filter(id=pk).update(**data.dict())
return await MenuModel.filter(id=pk).update(**data.dict())

View File

@@ -104,3 +104,9 @@ async def put_user(uid: int, data: UserPut):
await UserRoleModel.bulk_create(
[UserRoleModel(uid=uid, **role.dict()) for role in roles]
)
async def select_role(uid: int, rid: int):
"""用户切换角色"""
await UserRoleModel.filter(uid=uid, rid__not=rid).update(status=1)
return await UserRoleModel.filter(uid=uid, rid=rid).update(status=5)

Binary file not shown.

Binary file not shown.

View File

@@ -4,10 +4,24 @@ from fastapi import Depends, routing
from controller.common import about, login
from controller.menu import menu_add, menu_arr, menu_del, menu_put
from controller.role import (assigned_menu, role_add, role_arr, role_del,
role_has_menu, role_put, role_query)
from controller.user import (user_add, user_arr, user_del, user_info,
user_list, user_put)
from controller.role import (
assigned_menu,
role_add,
role_arr,
role_del,
role_has_menu,
role_put,
role_query,
)
from controller.user import (
user_add,
user_arr,
user_del,
user_info,
user_list,
user_put,
user_select_role,
)
from core.security import check_permissions
@@ -107,9 +121,7 @@ class Route(routing.APIRoute):
)
has_perm = {
# "dependencies": [Depends(check_permissions)]
}
has_perm = {"dependencies": [Depends(check_permissions)]}
routes = [
Route.post("/login", endpoint=login, tags=["公共"], summary="登录"),
@@ -129,6 +141,9 @@ routes = [
Route.post(
"/user/query", endpoint=user_list, tags=["用户管理"], summary="用户列表查询", **has_perm
),
Route.put(
"/user/role/{rid}", endpoint=user_select_role, tags=["用户管理"], summary="用户切换角色"
),
# 角色管理,
Route.get("/role", endpoint=role_arr, tags=["角色管理"], summary="角色列表", **has_perm),
Route.post("/role", endpoint=role_add, tags=["角色管理"], summary="角色新增", **has_perm),

View File

@@ -309,20 +309,6 @@ params = [
method="DELETE",
).dict(),
),
(
"/menu",
MenuIn(
name="修改菜单",
meta={"icon": "Update"},
path=None,
type=2,
component=None,
pid=5,
identifier="menu:update",
api="/menu/{pk}",
method="PUT",
).dict(),
),
# 分配权限
(
"/role/assigned/menu",