编写权限路由
This commit is contained in:
parent
296f80ec4a
commit
98e3940fc9
|
@ -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})
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -28,3 +28,9 @@ class AuthRuleNodeId(BaseModel):
|
|||
|
||||
class AuthRuleNodeIdList(BaseModel):
|
||||
id_list: int
|
||||
|
||||
|
||||
class AuthRuleNodeChangeInfo(BaseModel):
|
||||
id:int
|
||||
name: str
|
||||
belong: Union[None, int]
|
||||
|
|
3
main.py
3
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)
|
||||
|
|
Loading…
Reference in New Issue