From 98e3940fc911a60a90b62d13f1aabc7430281bf6 Mon Sep 17 00:00:00 2001 From: wcq <744800102@qq.com> Date: Thu, 9 Feb 2023 15:49:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E5=86=99=E6=9D=83=E9=99=90=E8=B7=AF?= =?UTF-8?q?=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Crud/AuthRuleCrud.py | 76 +++++++++++++++++++++++++++++++++----- Router/AuthRuleRouter.py | 27 +++++++++----- Schemas/AuthRuleSchemas.py | 6 +++ main.py | 3 +- 4 files changed, 91 insertions(+), 21 deletions(-) diff --git a/Crud/AuthRuleCrud.py b/Crud/AuthRuleCrud.py index 42afeb8..abe3f76 100644 --- a/Crud/AuthRuleCrud.py +++ b/Crud/AuthRuleCrud.py @@ -1,4 +1,4 @@ -from typing import Union +from typing import Union, List from sqlalchemy.orm import Session @@ -7,11 +7,12 @@ from Model.AuthRuleModel import AuthRuleNode def add_auth_rule_node(db: Session, name: str, belong: Union[int, None], node_type: str) -> AuthRuleNode: - parent_node = get_auth_rule_node_by_id(belong) - if not parent_node: - raise CommonException("父节点不存在") - if parent_node.node_type != 'category': - raise CommonException("父节点类型不为分类节点") + if belong: + parent_node = get_auth_rule_node_by_id(belong) + if not parent_node: + raise CommonException("父节点不存在") + if parent_node.node_type != 'category': + raise CommonException("父节点类型不为分类节点") item = AuthRuleNode(name=name, belong=belong, node_type=node_type) db.add(item) db.commit() @@ -24,9 +25,64 @@ def get_auth_rule_node_by_id(db: Session, node_id: int) -> AuthRuleNode: return auth_rule_node -def delete_auth_rule_node(db: Session, node_id: int): - pass +def delete_auth_rule_node_by_id_list(db: Session, node_id_list: List[int]): + delete_id_set = set(node_id_list) + node_id_set_temp = set(node_id_list) + n = 0 + while True: + n += 1 + node_id_set_temp = [item.id for item in + db.query(AuthRuleNode).filter(AuthRuleNode.belong.in_(node_id_set_temp))] + if node_id_set_temp: + for node_id in node_id_set_temp: + delete_id_set.add(node_id) + else: + break + # 可能出现死循环? + if n > 15: + raise CommonException("接口出现错误") + db.query(AuthRuleNode).filter(AuthRuleNode.belong.in_(delete_id_set)).delete() -def get_auth_rule_tree(db: Session): - pass +# test_list = [ +# {'id': 1, "belong": 7}, +# {'id': 2, "belong": 1}, +# {'id': 3, "belong": 2}, +# {'id': 4, "belong": 3}, +# {'id': 5, "belong": 8}, +# {'id': 6, "belong": 5}, +# {'id': 7, "belong": None}, +# {'id': 8, "belong": None}, +# ] + + +def get_auth_rule_tree(db: Session) -> dict: + item_list = db.query(AuthRuleNode).all() + node_list = [] + for item in item_list: + item_dic = item.to_dict() + item_dic['children'] = [] + node_list.append(item_dic) + + nodes_dic = {node["id"]: node for node in node_list} + rule_tree = [] + for node in node_list: + belong = node['belong'] + if belong: + if belong in nodes_dic: + nodes_dic[belong]['children'].append(node) + else: + print(f"不存在{belong}") + else: + rule_tree.append(node) + return rule_tree + + +def change_auth_rule_node(db: Session, node_id: int, name: str, belong: Union[int, None]): + if belong: + parent_node = get_auth_rule_node_by_id(belong) + if not parent_node: + raise CommonException("父节点不存在") + if parent_node.node_type != 'category': + raise CommonException("父节点类型不为分类节点") + db.query(AuthRuleNode).filter_by(node_id).update({'name': name, 'belong': belong}) diff --git a/Router/AuthRuleRouter.py b/Router/AuthRuleRouter.py index 07f1a20..cac161f 100644 --- a/Router/AuthRuleRouter.py +++ b/Router/AuthRuleRouter.py @@ -18,18 +18,25 @@ def add_auth_rule_node(body: AuthRuleSchemas.AuthRuleNodeAddInfo, db: Session = return new_auth_rule_node -@router.post("/delete_auth_rule_node", summary="删除权限规则节点") -def delete_auth_rule_node(body: AuthRuleSchemas.AuthRuleNodeId, db: Session = Depends(get_db)): - AuthRuleCrud.delete_auth_rule_node(db, body.id) +# @router.post("/delete_auth_rule_node_by_id", summary="删除权限规则节点") +# def delete_auth_rule_node(body: AuthRuleSchemas.AuthRuleNodeId, db: Session = Depends(get_db)): +# AuthRuleCrud.delete_auth_rule_node_by_id(db, body.id) +# return {"msg": "删除成功", "state": 1} + + +@router.post("/delete_auth_rule_node_by_id_list", summary="批量删除权限规则节点") +def delete_auth_rule_node_by_id_list(body: AuthRuleSchemas.AuthRuleNodeIdList, db: Session = Depends(get_db)): + AuthRuleCrud.delete_auth_rule_node_by_id_list(db, body.id_list) return {"msg": "删除成功", "state": 1} -@router.post("/delete_auth_rule_node", summary="批量删除权限规则节点") -def delete_auth_rule_node(body: AuthRuleSchemas.AuthRuleNodeId, db: Session = Depends(get_db)): - AuthRuleCrud.delete_auth_rule_node(db, body.id) - return {"msg": "删除成功", "state": 1} +@router.post("/change_auth_rule_node", summary="修改权限规则节点") +def change_auth_rule_node(body: AuthRuleSchemas.AuthRuleNodeChangeInfo, db: Session = Depends(get_db)): + AuthRuleCrud.change_auth_rule_node(db, body.name, body.belong) + return {"msg": "修改成功", "state": 1} -@router.post("/change_auth_rule_node", summary="修改权限规矩节点") -def change_auth_rule_node(body: AuthRuleSchemas.AuthRuleNodeChangeInfo): - pass +@router.get("/get_auth_rule_tree", summary="获取权限规则树") +def get_auth_rule_tree(db: Session = Depends(get_db)): + auth_rule_tree = AuthRuleCrud.get_auth_rule_tree(db) + return auth_rule_tree diff --git a/Schemas/AuthRuleSchemas.py b/Schemas/AuthRuleSchemas.py index 15ba25b..0906a73 100644 --- a/Schemas/AuthRuleSchemas.py +++ b/Schemas/AuthRuleSchemas.py @@ -28,3 +28,9 @@ class AuthRuleNodeId(BaseModel): class AuthRuleNodeIdList(BaseModel): id_list: int + + +class AuthRuleNodeChangeInfo(BaseModel): + id:int + name: str + belong: Union[None, int] diff --git a/main.py b/main.py index c86fd8c..9ab2df8 100644 --- a/main.py +++ b/main.py @@ -2,7 +2,7 @@ import uvicorn from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from Router import UserRouter, UserRegisterRouter, DepartmentRouter, PostRouter, AppRouter, UserManageRouter, \ - AppManageRouter + AppManageRouter,AuthRuleRouter from Utils.ConfigUtils import init_common_config from Utils.RedisUtils import init_redis_pool from Utils.SqlAlchemyUtils import Base, init_database @@ -33,5 +33,6 @@ app.include_router(PostRouter.router) app.include_router(AppRouter.router) app.include_router(UserManageRouter.router) app.include_router(AppManageRouter.router) +app.include_router(AuthRuleRouter.router) uvicorn.run(app=app, port=8001)