fix: add stocktake and adjustment modules to role permission assignment UI
This commit is contained in:
@ -158,8 +158,9 @@ def create_app():
|
|||||||
from app.services.permission_service import PermissionService
|
from app.services.permission_service import PermissionService
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
PermissionService.init_audit_menu()
|
PermissionService.init_audit_menu()
|
||||||
|
PermissionService.init_stocktake_menus()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"⚠️ 审计日志菜单初始化跳过: {e}")
|
print(f"⚠️ 菜单初始化跳过: {e}")
|
||||||
|
|
||||||
# -----------------------------------------------------
|
# -----------------------------------------------------
|
||||||
# 2.10 注册盘盈盘亏管理模块 (Stock Adjustment)
|
# 2.10 注册盘盈盘亏管理模块 (Stock Adjustment)
|
||||||
|
|||||||
@ -159,7 +159,7 @@ class PermissionService:
|
|||||||
# 1. 检查并创建审计日志菜单
|
# 1. 检查并创建审计日志菜单
|
||||||
menu_code = 'system_audit'
|
menu_code = 'system_audit'
|
||||||
existing_menu = SysMenu.query.filter_by(code=menu_code).first()
|
existing_menu = SysMenu.query.filter_by(code=menu_code).first()
|
||||||
|
|
||||||
if not existing_menu:
|
if not existing_menu:
|
||||||
new_menu = SysMenu(
|
new_menu = SysMenu(
|
||||||
parent_id=0,
|
parent_id=0,
|
||||||
@ -201,3 +201,160 @@ class PermissionService:
|
|||||||
db.session.rollback()
|
db.session.rollback()
|
||||||
print(f"❌ 初始化审计日志菜单失败: {str(e)}")
|
print(f"❌ 初始化审计日志菜单失败: {str(e)}")
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def init_stocktake_menus():
|
||||||
|
"""
|
||||||
|
初始化盘点管理菜单和权限
|
||||||
|
包括:顶级菜单、盲盘作业、盈亏调整、以及操作权限元素
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
role_code = 'SUPER_ADMIN'
|
||||||
|
|
||||||
|
# 1. 创建顶级菜单:盘点管理
|
||||||
|
stocktake_mgmt_code = 'stocktake_mgmt'
|
||||||
|
stocktake_menu = SysMenu.query.filter_by(code=stocktake_mgmt_code).first()
|
||||||
|
if not stocktake_menu:
|
||||||
|
stocktake_menu = SysMenu(
|
||||||
|
parent_id=0,
|
||||||
|
name='盘点管理',
|
||||||
|
code=stocktake_mgmt_code,
|
||||||
|
path='/stocktake',
|
||||||
|
sort_order=30,
|
||||||
|
is_visible=True
|
||||||
|
)
|
||||||
|
db.session.add(stocktake_menu)
|
||||||
|
db.session.flush()
|
||||||
|
print(f"✅ 盘点管理顶级菜单已创建")
|
||||||
|
else:
|
||||||
|
print(f"ℹ️ 盘点管理顶级菜单已存在")
|
||||||
|
|
||||||
|
# 2. 创建子菜单:盲盘作业
|
||||||
|
stocktake_op_code = 'inventory_stocktake'
|
||||||
|
stocktake_op_menu = SysMenu.query.filter_by(code=stocktake_op_code).first()
|
||||||
|
if not stocktake_op_menu:
|
||||||
|
stocktake_op_menu = SysMenu(
|
||||||
|
parent_id=stocktake_menu.id,
|
||||||
|
name='盲盘作业',
|
||||||
|
code=stocktake_op_code,
|
||||||
|
path='/stocktake/operation',
|
||||||
|
sort_order=1,
|
||||||
|
is_visible=True
|
||||||
|
)
|
||||||
|
db.session.add(stocktake_op_menu)
|
||||||
|
db.session.flush()
|
||||||
|
print(f"✅ 盲盘作业菜单已创建")
|
||||||
|
else:
|
||||||
|
print(f"ℹ️ 盲盘作业菜单已存在")
|
||||||
|
|
||||||
|
# 3. 为盲盘作业添加操作权限元素
|
||||||
|
stocktake_op_element = SysElement.query.filter_by(
|
||||||
|
menu_code=stocktake_op_code,
|
||||||
|
code='inventory_stocktake:operation'
|
||||||
|
).first()
|
||||||
|
if not stocktake_op_element:
|
||||||
|
stocktake_op_element = SysElement(
|
||||||
|
menu_code=stocktake_op_code,
|
||||||
|
name='盲盘操作',
|
||||||
|
code='inventory_stocktake:operation',
|
||||||
|
element_type='operation'
|
||||||
|
)
|
||||||
|
db.session.add(stocktake_op_element)
|
||||||
|
print(f"✅ 盲盘作业操作权限已创建")
|
||||||
|
else:
|
||||||
|
print(f"ℹ️ 盲盘作业操作权限已存在")
|
||||||
|
|
||||||
|
# 4. 创建子菜单:盈亏调整
|
||||||
|
adjustment_code = 'stock_adjustment'
|
||||||
|
adjustment_menu = SysMenu.query.filter_by(code=adjustment_code).first()
|
||||||
|
if not adjustment_menu:
|
||||||
|
adjustment_menu = SysMenu(
|
||||||
|
parent_id=stocktake_menu.id,
|
||||||
|
name='盈亏调整',
|
||||||
|
code=adjustment_code,
|
||||||
|
path='/stocktake/adjustment',
|
||||||
|
sort_order=2,
|
||||||
|
is_visible=True
|
||||||
|
)
|
||||||
|
db.session.add(adjustment_menu)
|
||||||
|
db.session.flush()
|
||||||
|
print(f"✅ 盈亏调整菜单已创建")
|
||||||
|
else:
|
||||||
|
print(f"ℹ️ 盈亏调整菜单已存在")
|
||||||
|
|
||||||
|
# 5. 为盈亏调整添加列表权限元素 (stock_adjustment:list)
|
||||||
|
adjustment_list_element = SysElement.query.filter_by(
|
||||||
|
menu_code=adjustment_code,
|
||||||
|
code='stock_adjustment:list'
|
||||||
|
).first()
|
||||||
|
if not adjustment_list_element:
|
||||||
|
adjustment_list_element = SysElement(
|
||||||
|
menu_code=adjustment_code,
|
||||||
|
name='盈亏列表',
|
||||||
|
code='stock_adjustment:list',
|
||||||
|
element_type='element'
|
||||||
|
)
|
||||||
|
db.session.add(adjustment_list_element)
|
||||||
|
print(f"✅ 盈亏调整列表权限已创建")
|
||||||
|
else:
|
||||||
|
print(f"ℹ️ 盈亏调整列表权限已存在")
|
||||||
|
|
||||||
|
# 6. 为盈亏调整添加操作权限元素 (stock_adjustment:operation)
|
||||||
|
adjustment_op_element = SysElement.query.filter_by(
|
||||||
|
menu_code=adjustment_code,
|
||||||
|
code='stock_adjustment:operation'
|
||||||
|
).first()
|
||||||
|
if not adjustment_op_element:
|
||||||
|
adjustment_op_element = SysElement(
|
||||||
|
menu_code=adjustment_code,
|
||||||
|
name='盈亏操作',
|
||||||
|
code='stock_adjustment:operation',
|
||||||
|
element_type='operation'
|
||||||
|
)
|
||||||
|
db.session.add(adjustment_op_element)
|
||||||
|
print(f"✅ 盈亏调整操作权限已创建")
|
||||||
|
else:
|
||||||
|
print(f"ℹ️ 盈亏调整操作权限已存在")
|
||||||
|
|
||||||
|
# 7. 为超级管理员分配所有盘点相关权限
|
||||||
|
menu_codes = [stocktake_mgmt_code, stocktake_op_code, adjustment_code]
|
||||||
|
for mc in menu_codes:
|
||||||
|
existing_perm = SysRolePermission.query.filter_by(
|
||||||
|
role_code=role_code,
|
||||||
|
target_code=mc,
|
||||||
|
type='menu'
|
||||||
|
).first()
|
||||||
|
if not existing_perm:
|
||||||
|
new_perm = SysRolePermission(
|
||||||
|
role_code=role_code,
|
||||||
|
target_code=mc,
|
||||||
|
type='menu'
|
||||||
|
)
|
||||||
|
db.session.add(new_perm)
|
||||||
|
print(f"✅ 超级管理员已赋予 {mc} 菜单权限")
|
||||||
|
|
||||||
|
# 8. 分配操作权限
|
||||||
|
op_codes = ['inventory_stocktake:operation', 'stock_adjustment:list', 'stock_adjustment:operation']
|
||||||
|
for oc in op_codes:
|
||||||
|
existing_perm = SysRolePermission.query.filter_by(
|
||||||
|
role_code=role_code,
|
||||||
|
target_code=oc,
|
||||||
|
type='element'
|
||||||
|
).first()
|
||||||
|
if not existing_perm:
|
||||||
|
new_perm = SysRolePermission(
|
||||||
|
role_code=role_code,
|
||||||
|
target_code=oc,
|
||||||
|
type='element'
|
||||||
|
)
|
||||||
|
db.session.add(new_perm)
|
||||||
|
print(f"✅ 超级管理员已赋予 {oc} 操作权限")
|
||||||
|
|
||||||
|
# 9. 提交
|
||||||
|
db.session.commit()
|
||||||
|
return True
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
db.session.rollback()
|
||||||
|
print(f"❌ 初始化盘点管理菜单失败: {str(e)}")
|
||||||
|
raise e
|
||||||
|
|||||||
Reference in New Issue
Block a user