|
@@ -12,8 +12,11 @@ from utils import *
|
|
from utils.ry_system_util import *
|
|
from utils.ry_system_util import *
|
|
import json
|
|
import json
|
|
from sqlalchemy.sql import func
|
|
from sqlalchemy.sql import func
|
|
|
|
+from common.enc import mpfun, sys_menu_data, sys_menu_layer_data
|
|
from common.auth_user import *
|
|
from common.auth_user import *
|
|
|
|
+from common.db import db_czrz
|
|
import traceback
|
|
import traceback
|
|
|
|
+from exceptions import HmacException
|
|
|
|
|
|
|
|
|
|
router = APIRouter()
|
|
router = APIRouter()
|
|
@@ -119,12 +122,16 @@ async def getRouters(request: Request, db: Session = Depends(get_db),
|
|
query = query.filter(SysMenu.menu_id!=11655)
|
|
query = query.filter(SysMenu.menu_id!=11655)
|
|
query = query.filter(SysMenu.del_flag != '2')
|
|
query = query.filter(SysMenu.del_flag != '2')
|
|
query = query.order_by(SysMenu.order_num.asc())
|
|
query = query.order_by(SysMenu.order_num.asc())
|
|
- menus =query.all() # 顶级菜单
|
|
|
|
|
|
+ menus = query.all() # 顶级菜单
|
|
|
|
|
|
# 递归函数用于构建树形结构
|
|
# 递归函数用于构建树形结构
|
|
def build_menu_tree(menus, parent_menu):
|
|
def build_menu_tree(menus, parent_menu):
|
|
menu_tree = [] # 初始化一个列表来存储菜单树结构
|
|
menu_tree = [] # 初始化一个列表来存储菜单树结构
|
|
for menu in menus:
|
|
for menu in menus:
|
|
|
|
+
|
|
|
|
+ if sys_menu_data.sign_valid_row(menu) == False:
|
|
|
|
+ raise HmacException(500, "系统菜单表验证异常,已被非法篡改")
|
|
|
|
+
|
|
component = 'Layout'
|
|
component = 'Layout'
|
|
if menu.menu_type=='M' and parent_menu:
|
|
if menu.menu_type=='M' and parent_menu:
|
|
component = 'ParentView'
|
|
component = 'ParentView'
|
|
@@ -186,6 +193,13 @@ async def getRouters(request: Request, db: Session = Depends(get_db),
|
|
"msg": "操作成功",
|
|
"msg": "操作成功",
|
|
"data": routers #[router.dict() for router in routers] # 如果没有顶级菜单,返回空列表
|
|
"data": routers #[router.dict() for router in routers] # 如果没有顶级菜单,返回空列表
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ except HmacException as e:
|
|
|
|
+ return {
|
|
|
|
+ "code": e.code,
|
|
|
|
+ "msg": e.msg
|
|
|
|
+ }
|
|
|
|
+
|
|
except Exception as e:
|
|
except Exception as e:
|
|
traceback.print_exc()
|
|
traceback.print_exc()
|
|
raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
|
|
raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
|
|
@@ -250,6 +264,10 @@ async def getRouters(request: Request, db: Session = Depends(get_db),
|
|
def build_menu_tree(menus, parent_menu):
|
|
def build_menu_tree(menus, parent_menu):
|
|
menu_tree = [] # 初始化一个列表来存储菜单树结构
|
|
menu_tree = [] # 初始化一个列表来存储菜单树结构
|
|
for menu in menus:
|
|
for menu in menus:
|
|
|
|
+
|
|
|
|
+ if sys_menu_layer_data.sign_valid_row(menu) == False:
|
|
|
|
+ raise HmacException(500, "系统图层菜单表验证异常,已被非法篡改")
|
|
|
|
+
|
|
menu_data = {
|
|
menu_data = {
|
|
"component": menu.component or 'Layout',
|
|
"component": menu.component or 'Layout',
|
|
"isVideo":False,
|
|
"isVideo":False,
|
|
@@ -313,6 +331,13 @@ async def getRouters(request: Request, db: Session = Depends(get_db),
|
|
"msg": "操作成功",
|
|
"msg": "操作成功",
|
|
"data": routers # [router.dict() for router in routers] # 如果没有顶级菜单,返回空列表
|
|
"data": routers # [router.dict() for router in routers] # 如果没有顶级菜单,返回空列表
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ except HmacException as e:
|
|
|
|
+ return {
|
|
|
|
+ "code": e.code,
|
|
|
|
+ "msg": e.msg
|
|
|
|
+ }
|
|
|
|
+
|
|
except Exception as e:
|
|
except Exception as e:
|
|
traceback.print_exc()
|
|
traceback.print_exc()
|
|
raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
|
|
raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
|
|
@@ -523,35 +548,44 @@ async def create(
|
|
form_data: SysMuneCreateForm,
|
|
form_data: SysMuneCreateForm,
|
|
db: Session = Depends(get_db),
|
|
db: Session = Depends(get_db),
|
|
body = Depends(remove_xss_json),
|
|
body = Depends(remove_xss_json),
|
|
|
|
+ auth_user: AuthUser = Depends(find_auth_user),
|
|
user_id = Depends(valid_access_token)
|
|
user_id = Depends(valid_access_token)
|
|
):
|
|
):
|
|
|
|
|
|
try:
|
|
try:
|
|
new_menu = SysMenu(
|
|
new_menu = SysMenu(
|
|
- menu_name = form_data.menuName,
|
|
|
|
- parent_id = form_data.parentId,
|
|
|
|
- order_num = form_data.orderNum,
|
|
|
|
- path = form_data.path,
|
|
|
|
- is_frame = int(form_data.isFrame),
|
|
|
|
- is_cache = int(form_data.isCache),
|
|
|
|
- menu_type = form_data.menuType,
|
|
|
|
- visible = form_data.visible,
|
|
|
|
- status = form_data.status,
|
|
|
|
- icon = form_data.icon,
|
|
|
|
- component= form_data.component,
|
|
|
|
- perms=form_data.perms,
|
|
|
|
- query_param=form_data.queryParam,
|
|
|
|
- create_by = user_id
|
|
|
|
- )
|
|
|
|
|
|
+ menu_name = form_data.menuName,
|
|
|
|
+ parent_id = form_data.parentId,
|
|
|
|
+ order_num = form_data.orderNum,
|
|
|
|
+ path = form_data.path,
|
|
|
|
+ is_frame = int(form_data.isFrame),
|
|
|
|
+ is_cache = int(form_data.isCache),
|
|
|
|
+ menu_type = form_data.menuType,
|
|
|
|
+ visible = form_data.visible,
|
|
|
|
+ status = form_data.status,
|
|
|
|
+ icon = form_data.icon,
|
|
|
|
+ component= form_data.component,
|
|
|
|
+ perms=form_data.perms,
|
|
|
|
+ query_param=form_data.queryParam,
|
|
|
|
+ create_by = user_id
|
|
|
|
+ )
|
|
db.add(new_menu)
|
|
db.add(new_menu)
|
|
db.commit()
|
|
db.commit()
|
|
db.refresh(new_menu)
|
|
db.refresh(new_menu)
|
|
|
|
+
|
|
|
|
+ sys_menu_data.sign_table()
|
|
|
|
+
|
|
|
|
+ db_czrz.log(db, auth_user, "系统管理", f"后台管理新建菜单【{form_data.menuName}】成功", request.client.host)
|
|
|
|
+
|
|
return {
|
|
return {
|
|
"code": 200,
|
|
"code": 200,
|
|
"data": None,
|
|
"data": None,
|
|
"msg": "操作成功"
|
|
"msg": "操作成功"
|
|
}
|
|
}
|
|
except Exception as e:
|
|
except Exception as e:
|
|
|
|
+
|
|
|
|
+ traceback.print_exc()
|
|
|
|
+
|
|
db.rollback()
|
|
db.rollback()
|
|
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
|
|
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
|
|
|
|
|
|
@@ -578,6 +612,7 @@ async def update(
|
|
# form_data: SysMuneUpdateForm,
|
|
# form_data: SysMuneUpdateForm,
|
|
db: Session = Depends(get_db),
|
|
db: Session = Depends(get_db),
|
|
body = Depends(remove_xss_json),
|
|
body = Depends(remove_xss_json),
|
|
|
|
+ auth_user: AuthUser = Depends(find_auth_user),
|
|
user_id = Depends(valid_access_token)
|
|
user_id = Depends(valid_access_token)
|
|
):
|
|
):
|
|
|
|
|
|
@@ -618,19 +653,28 @@ async def update(
|
|
if 'visible' in body:
|
|
if 'visible' in body:
|
|
menu.visible=body['visible']
|
|
menu.visible=body['visible']
|
|
if user_id:
|
|
if user_id:
|
|
- menu.create_by = user_id
|
|
|
|
|
|
+ menu.update_by = user_id
|
|
|
|
+
|
|
|
|
+ menu.update_time = datetime.now()
|
|
|
|
+ menu.sign = sys_menu_data.get_sign_hmac(menu)
|
|
|
|
+
|
|
# for field, value in menu_data.items():
|
|
# for field, value in menu_data.items():
|
|
# if field != 'menu_id' and field in menu_to_update.__dict__:
|
|
# if field != 'menu_id' and field in menu_to_update.__dict__:
|
|
# setattr(menu_to_update, field, value)
|
|
# setattr(menu_to_update, field, value)
|
|
#
|
|
#
|
|
# db.add(menu_to_update)
|
|
# db.add(menu_to_update)
|
|
db.commit()
|
|
db.commit()
|
|
|
|
+
|
|
|
|
+ db_czrz.log(db, auth_user, "系统管理", f"后台管理更新菜单【{body['menuName']}】成功", request.client.host)
|
|
|
|
+
|
|
return {
|
|
return {
|
|
"code": 200,
|
|
"code": 200,
|
|
"msg": "菜单更新成功"
|
|
"msg": "菜单更新成功"
|
|
}
|
|
}
|
|
except Exception as e:
|
|
except Exception as e:
|
|
# db.rollback()
|
|
# db.rollback()
|
|
|
|
+ traceback.print_exc()
|
|
|
|
+
|
|
if str(e)=='':
|
|
if str(e)=='':
|
|
e = detail
|
|
e = detail
|
|
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
|
|
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
|
|
@@ -641,6 +685,7 @@ async def delete(
|
|
menu_id: int,
|
|
menu_id: int,
|
|
db: Session = Depends(get_db),
|
|
db: Session = Depends(get_db),
|
|
body = Depends(remove_xss_json),
|
|
body = Depends(remove_xss_json),
|
|
|
|
+ auth_user: AuthUser = Depends(find_auth_user),
|
|
user_id = Depends(valid_access_token)
|
|
user_id = Depends(valid_access_token)
|
|
):
|
|
):
|
|
try:
|
|
try:
|
|
@@ -652,15 +697,22 @@ async def delete(
|
|
if not menu_to_delete:
|
|
if not menu_to_delete:
|
|
detail = "菜单不存在"
|
|
detail = "菜单不存在"
|
|
raise HTTPException(status_code=404, detail="菜单不存在")
|
|
raise HTTPException(status_code=404, detail="菜单不存在")
|
|
- menu_to_delete.create_by = user_id
|
|
|
|
menu_to_delete.del_flag='2'
|
|
menu_to_delete.del_flag='2'
|
|
|
|
+ menu_to_delete.update_by = user_id
|
|
|
|
+ menu_to_delete.update_time = datetime.now()
|
|
|
|
+ menu_to_delete.sign = sys_menu_data.get_sign_hmac(menu_to_delete)
|
|
|
|
+
|
|
# db.delete(menu_to_delete)
|
|
# db.delete(menu_to_delete)
|
|
db.commit()
|
|
db.commit()
|
|
|
|
+
|
|
|
|
+ db_czrz.log(db, auth_user, "系统管理", f"后台管理删除菜单【{menu_to_delete.menu_name}】成功", request.client.host)
|
|
|
|
+
|
|
return {
|
|
return {
|
|
"code": 200,
|
|
"code": 200,
|
|
"msg": "菜单删除成功"
|
|
"msg": "菜单删除成功"
|
|
}
|
|
}
|
|
except Exception as e:
|
|
except Exception as e:
|
|
|
|
+ traceback.print_exc()
|
|
db.rollback()
|
|
db.rollback()
|
|
if str(e)=='':
|
|
if str(e)=='':
|
|
e = detail
|
|
e = detail
|