imetting_backend/test/test_menu_permissions.py

90 lines
3.0 KiB
Python
Raw Permalink Normal View History

2025-12-11 08:48:12 +00:00
#!/usr/bin/env python3
"""
测试菜单权限数据是否存在
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from app.core.database import get_db_connection
def test_menu_permissions():
print("=== 测试菜单权限数据 ===\n")
try:
# 连接数据库
with get_db_connection() as connection:
cursor = connection.cursor(dictionary=True)
# 1. 检查menus表
print("1. 检查menus表:")
cursor.execute("SELECT COUNT(*) as count FROM menus")
menu_count = cursor.fetchone()['count']
print(f" - 菜单总数: {menu_count}")
if menu_count > 0:
cursor.execute("SELECT menu_id, menu_code, menu_name, is_active FROM menus ORDER BY sort_order")
menus = cursor.fetchall()
for menu in menus:
print(f" - [{menu['menu_id']}] {menu['menu_name']} ({menu['menu_code']}) - 启用: {menu['is_active']}")
else:
print(" ⚠️ menus表为空")
print()
# 2. 检查roles表
print("2. 检查roles表:")
cursor.execute("SELECT * FROM roles ORDER BY role_id")
roles = cursor.fetchall()
for role in roles:
print(f" - [{role['role_id']}] {role['role_name']}")
print()
# 3. 检查role_menu_permissions表
print("3. 检查role_menu_permissions表:")
cursor.execute("SELECT COUNT(*) as count FROM role_menu_permissions")
perm_count = cursor.fetchone()['count']
print(f" - 权限总数: {perm_count}")
if perm_count > 0:
cursor.execute("""
SELECT r.role_name, m.menu_name, rmp.role_id, rmp.menu_id
FROM role_menu_permissions rmp
JOIN roles r ON rmp.role_id = r.role_id
JOIN menus m ON rmp.menu_id = m.menu_id
ORDER BY rmp.role_id, m.sort_order
""")
permissions = cursor.fetchall()
current_role = None
for perm in permissions:
if current_role != perm['role_name']:
current_role = perm['role_name']
print(f"\n {current_role}的权限:")
print(f" - {perm['menu_name']}")
else:
print(" ⚠️ role_menu_permissions表为空")
print("\n" + "="*50)
# 4. 检查是否需要执行SQL脚本
if menu_count == 0 or perm_count == 0:
print("\n❌ 数据库中缺少菜单或权限数据!")
print("请执行以下命令初始化数据:")
print("\nmysql -h 10.100.51.161 -u root -psagacity imeeting_dev < backend/sql/add_menu_permissions_system.sql")
print("\n或者在MySQL客户端中执行该SQL文件。")
else:
print("\n✅ 菜单权限数据正常!")
cursor.close()
connection.close()
except Exception as e:
print(f"❌ 错误: {str(e)}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
test_menu_permissions()