#!/usr/bin/env python3 """ 重新初始化RBAC数据 - 包含完整的树形菜单结构 """ import pymysql from dotenv import load_dotenv import os import uuid from datetime import datetime load_dotenv() def get_db_connection(): """获取数据库连接""" try: config = { 'host': os.getenv('DB_HOST', 'localhost'), 'port': int(os.getenv('DB_PORT', 3306)), 'user': os.getenv('DB_USER', 'root'), 'password': os.getenv('DB_PASSWORD', 'admin'), 'database': os.getenv('DB_NAME', 'lq_db'), 'charset': 'utf8mb4', 'autocommit': True } return pymysql.connect(**config) except Exception as e: print(f"数据库连接失败: {e}") return None def clear_rbac_data(cursor): """清理现有RBAC数据""" print("🧹 清理现有RBAC数据...") # 清理关联表 cursor.execute("DELETE FROM role_permissions") cursor.execute("DELETE FROM role_menus") cursor.execute("DELETE FROM user_roles") # 清理主表 cursor.execute("DELETE FROM permissions") cursor.execute("DELETE FROM menus") cursor.execute("DELETE FROM roles") print(" ✅ 清理完成") def insert_menus(cursor): """插入菜单数据""" print("📋 插入菜单数据...") menus_data = [ # 主菜单 { 'id': 'dashboard-menu', 'parent_id': None, 'name': 'dashboard', 'title': '仪表盘', 'path': '/dashboard', 'component': 'dashboard/Index', 'icon': 'House', 'sort_order': 1, 'menu_type': 'menu', 'is_hidden': False, 'description': '系统概览和统计信息' }, { 'id': 'profile-menu', 'parent_id': None, 'name': 'profile', 'title': '个人资料', 'path': '/profile', 'component': 'user/Profile', 'icon': 'User', 'sort_order': 2, 'menu_type': 'menu', 'is_hidden': False, 'description': '个人信息管理' }, { 'id': 'admin-menu', 'parent_id': None, 'name': 'admin', 'title': '系统管理', 'path': '/admin', 'component': None, 'icon': 'Setting', 'sort_order': 3, 'menu_type': 'menu', 'is_hidden': False, 'description': '系统管理功能' }, # 系统管理子菜单 { 'id': 'admin-dashboard-menu', 'parent_id': 'admin-menu', 'name': 'admin-dashboard', 'title': '管理概览', 'path': '/admin/dashboard', 'component': 'admin/Dashboard', 'icon': 'Monitor', 'sort_order': 1, 'menu_type': 'menu', 'is_hidden': False, 'description': '管理员仪表盘' }, { 'id': 'admin-users-menu', 'parent_id': 'admin-menu', 'name': 'admin-users', 'title': '用户管理', 'path': '/admin/users', 'component': 'admin/Users', 'icon': 'UserFilled', 'sort_order': 2, 'menu_type': 'menu', 'is_hidden': False, 'description': '用户信息管理' }, { 'id': 'admin-roles-menu', 'parent_id': 'admin-menu', 'name': 'admin-roles', 'title': '角色管理', 'path': '/admin/roles', 'component': 'admin/Roles', 'icon': 'Avatar', 'sort_order': 3, 'menu_type': 'menu', 'is_hidden': False, 'description': '角色权限管理' }, { 'id': 'admin-menus-menu', 'parent_id': 'admin-menu', 'name': 'admin-menus', 'title': '菜单管理', 'path': '/admin/menus', 'component': 'admin/Menus', 'icon': 'Menu', 'sort_order': 4, 'menu_type': 'menu', 'is_hidden': False, 'description': '菜单结构管理' }, { 'id': 'admin-permissions-menu', 'parent_id': 'admin-menu', 'name': 'admin-permissions', 'title': '权限管理', 'path': '/admin/permissions', 'component': 'admin/Permissions', 'icon': 'Key', 'sort_order': 5, 'menu_type': 'menu', 'is_hidden': False, 'description': '权限配置管理' }, { 'id': 'admin-apps-menu', 'parent_id': 'admin-menu', 'name': 'admin-apps', 'title': '应用管理', 'path': '/admin/apps', 'component': 'admin/Apps', 'icon': 'Grid', 'sort_order': 6, 'menu_type': 'menu', 'is_hidden': False, 'description': 'OAuth2应用管理' }, { 'id': 'admin-logs-menu', 'parent_id': 'admin-menu', 'name': 'admin-logs', 'title': '系统日志', 'path': '/admin/logs', 'component': 'admin/Logs', 'icon': 'Document', 'sort_order': 7, 'menu_type': 'menu', 'is_hidden': False, 'description': '系统操作日志' }, { 'id': 'admin-settings-menu', 'parent_id': 'admin-menu', 'name': 'admin-settings', 'title': '系统设置', 'path': '/admin/settings', 'component': 'admin/Settings', 'icon': 'Tools', 'sort_order': 8, 'menu_type': 'menu', 'is_hidden': False, 'description': '系统配置设置' }, # 用户管理按钮权限 { 'id': 'users-create-btn', 'parent_id': 'admin-users-menu', 'name': 'users-create', 'title': '创建用户', 'path': None, 'component': None, 'icon': 'Plus', 'sort_order': 1, 'menu_type': 'button', 'is_hidden': False, 'description': '创建新用户' }, { 'id': 'users-edit-btn', 'parent_id': 'admin-users-menu', 'name': 'users-edit', 'title': '编辑用户', 'path': None, 'component': None, 'icon': 'Edit', 'sort_order': 2, 'menu_type': 'button', 'is_hidden': False, 'description': '编辑用户信息' }, { 'id': 'users-delete-btn', 'parent_id': 'admin-users-menu', 'name': 'users-delete', 'title': '删除用户', 'path': None, 'component': None, 'icon': 'Delete', 'sort_order': 3, 'menu_type': 'button', 'is_hidden': False, 'description': '删除用户' }, { 'id': 'users-batch-delete-btn', 'parent_id': 'admin-users-menu', 'name': 'users-batch-delete', 'title': '批量删除', 'path': None, 'component': None, 'icon': 'DeleteFilled', 'sort_order': 4, 'menu_type': 'button', 'is_hidden': False, 'description': '批量删除用户' }, { 'id': 'users-assign-role-btn', 'parent_id': 'admin-users-menu', 'name': 'users-assign-role', 'title': '分配角色', 'path': None, 'component': None, 'icon': 'Avatar', 'sort_order': 5, 'menu_type': 'button', 'is_hidden': False, 'description': '为用户分配角色' }, { 'id': 'users-reset-password-btn', 'parent_id': 'admin-users-menu', 'name': 'users-reset-password', 'title': '重置密码', 'path': None, 'component': None, 'icon': 'Key', 'sort_order': 6, 'menu_type': 'button', 'is_hidden': False, 'description': '重置用户密码' }, # 角色管理按钮权限 { 'id': 'roles-create-btn', 'parent_id': 'admin-roles-menu', 'name': 'roles-create', 'title': '创建角色', 'path': None, 'component': None, 'icon': 'Plus', 'sort_order': 1, 'menu_type': 'button', 'is_hidden': False, 'description': '创建新角色' }, { 'id': 'roles-edit-btn', 'parent_id': 'admin-roles-menu', 'name': 'roles-edit', 'title': '编辑角色', 'path': None, 'component': None, 'icon': 'Edit', 'sort_order': 2, 'menu_type': 'button', 'is_hidden': False, 'description': '编辑角色信息' }, { 'id': 'roles-delete-btn', 'parent_id': 'admin-roles-menu', 'name': 'roles-delete', 'title': '删除角色', 'path': None, 'component': None, 'icon': 'Delete', 'sort_order': 3, 'menu_type': 'button', 'is_hidden': False, 'description': '删除角色' }, { 'id': 'roles-assign-permission-btn', 'parent_id': 'admin-roles-menu', 'name': 'roles-assign-permission', 'title': '分配权限', 'path': None, 'component': None, 'icon': 'Key', 'sort_order': 4, 'menu_type': 'button', 'is_hidden': False, 'description': '为角色分配权限' }, { 'id': 'roles-assign-menu-btn', 'parent_id': 'admin-roles-menu', 'name': 'roles-assign-menu', 'title': '分配菜单', 'path': None, 'component': None, 'icon': 'Menu', 'sort_order': 5, 'menu_type': 'button', 'is_hidden': False, 'description': '为角色分配菜单' }, # 菜单管理按钮权限 { 'id': 'menus-create-btn', 'parent_id': 'admin-menus-menu', 'name': 'menus-create', 'title': '创建菜单', 'path': None, 'component': None, 'icon': 'Plus', 'sort_order': 1, 'menu_type': 'button', 'is_hidden': False, 'description': '创建新菜单' }, { 'id': 'menus-edit-btn', 'parent_id': 'admin-menus-menu', 'name': 'menus-edit', 'title': '编辑菜单', 'path': None, 'component': None, 'icon': 'Edit', 'sort_order': 2, 'menu_type': 'button', 'is_hidden': False, 'description': '编辑菜单信息' }, { 'id': 'menus-delete-btn', 'parent_id': 'admin-menus-menu', 'name': 'menus-delete', 'title': '删除菜单', 'path': None, 'component': None, 'icon': 'Delete', 'sort_order': 3, 'menu_type': 'button', 'is_hidden': False, 'description': '删除菜单' }, { 'id': 'menus-sort-btn', 'parent_id': 'admin-menus-menu', 'name': 'menus-sort', 'title': '排序菜单', 'path': None, 'component': None, 'icon': 'Sort', 'sort_order': 4, 'menu_type': 'button', 'is_hidden': False, 'description': '调整菜单排序' }, # 权限管理按钮权限 { 'id': 'permissions-create-btn', 'parent_id': 'admin-permissions-menu', 'name': 'permissions-create', 'title': '创建权限', 'path': None, 'component': None, 'icon': 'Plus', 'sort_order': 1, 'menu_type': 'button', 'is_hidden': False, 'description': '创建新权限' }, { 'id': 'permissions-edit-btn', 'parent_id': 'admin-permissions-menu', 'name': 'permissions-edit', 'title': '编辑权限', 'path': None, 'component': None, 'icon': 'Edit', 'sort_order': 2, 'menu_type': 'button', 'is_hidden': False, 'description': '编辑权限信息' }, { 'id': 'permissions-delete-btn', 'parent_id': 'admin-permissions-menu', 'name': 'permissions-delete', 'title': '删除权限', 'path': None, 'component': None, 'icon': 'Delete', 'sort_order': 3, 'menu_type': 'button', 'is_hidden': False, 'description': '删除权限' }, # 应用管理按钮权限 { 'id': 'apps-create-btn', 'parent_id': 'admin-apps-menu', 'name': 'apps-create', 'title': '创建应用', 'path': None, 'component': None, 'icon': 'Plus', 'sort_order': 1, 'menu_type': 'button', 'is_hidden': False, 'description': '创建OAuth2应用' }, { 'id': 'apps-edit-btn', 'parent_id': 'admin-apps-menu', 'name': 'apps-edit', 'title': '编辑应用', 'path': None, 'component': None, 'icon': 'Edit', 'sort_order': 2, 'menu_type': 'button', 'is_hidden': False, 'description': '编辑应用信息' }, { 'id': 'apps-delete-btn', 'parent_id': 'admin-apps-menu', 'name': 'apps-delete', 'title': '删除应用', 'path': None, 'component': None, 'icon': 'Delete', 'sort_order': 3, 'menu_type': 'button', 'is_hidden': False, 'description': '删除应用' }, { 'id': 'apps-secret-btn', 'parent_id': 'admin-apps-menu', 'name': 'apps-secret', 'title': '查看密钥', 'path': None, 'component': None, 'icon': 'Key', 'sort_order': 4, 'menu_type': 'button', 'is_hidden': False, 'description': '查看应用密钥' }, { 'id': 'apps-reset-secret-btn', 'parent_id': 'admin-apps-menu', 'name': 'apps-reset-secret', 'title': '重置密钥', 'path': None, 'component': None, 'icon': 'RefreshRight', 'sort_order': 5, 'menu_type': 'button', 'is_hidden': False, 'description': '重置应用密钥' } ] for menu in menus_data: cursor.execute(""" INSERT INTO menus (id, parent_id, name, title, path, component, icon, sort_order, menu_type, is_hidden, is_active, description, created_at, updated_at) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW(), NOW()) """, ( menu['id'], menu['parent_id'], menu['name'], menu['title'], menu['path'], menu['component'], menu['icon'], menu['sort_order'], menu['menu_type'], menu['is_hidden'], True, menu['description'] )) print(f" ✅ 插入了 {len(menus_data)} 个菜单项") def insert_roles(cursor): """插入角色数据""" print("👥 插入角色数据...") roles_data = [ { 'id': str(uuid.uuid4()), 'name': 'super_admin', 'display_name': '超级管理员', 'description': '拥有系统所有权限的超级管理员', 'is_system': True }, { 'id': str(uuid.uuid4()), 'name': 'admin', 'display_name': '管理员', 'description': '系统管理员,拥有大部分管理权限', 'is_system': True }, { 'id': str(uuid.uuid4()), 'name': 'user_manager', 'display_name': '用户管理员', 'description': '负责用户管理的管理员', 'is_system': True }, { 'id': str(uuid.uuid4()), 'name': 'app_manager', 'display_name': '应用管理员', 'description': '负责应用管理的管理员', 'is_system': True }, { 'id': str(uuid.uuid4()), 'name': 'user', 'display_name': '普通用户', 'description': '系统普通用户', 'is_system': True } ] role_ids = {} for role in roles_data: cursor.execute(""" INSERT INTO roles (id, name, display_name, description, is_active, is_system, created_at, updated_at) VALUES (%s, %s, %s, %s, %s, %s, NOW(), NOW()) """, (role['id'], role['name'], role['display_name'], role['description'], True, role['is_system'])) role_ids[role['name']] = role['id'] print(f" ✅ 插入了 {len(roles_data)} 个角色") return role_ids def insert_permissions(cursor): """插入权限数据""" print("🔐 插入权限数据...") permissions_data = [ # 用户管理权限 {'name': 'user.view', 'display_name': '查看用户', 'resource': 'user', 'action': 'view', 'description': '查看用户列表和详情'}, {'name': 'user.create', 'display_name': '创建用户', 'resource': 'user', 'action': 'create', 'description': '创建新用户'}, {'name': 'user.edit', 'display_name': '编辑用户', 'resource': 'user', 'action': 'edit', 'description': '编辑用户信息'}, {'name': 'user.delete', 'display_name': '删除用户', 'resource': 'user', 'action': 'delete', 'description': '删除用户'}, {'name': 'user.batch_delete', 'display_name': '批量删除用户', 'resource': 'user', 'action': 'batch_delete', 'description': '批量删除用户'}, {'name': 'user.assign_role', 'display_name': '分配用户角色', 'resource': 'user', 'action': 'assign_role', 'description': '为用户分配角色'}, {'name': 'user.reset_password', 'display_name': '重置用户密码', 'resource': 'user', 'action': 'reset_password', 'description': '重置用户密码'}, # 角色管理权限 {'name': 'role.view', 'display_name': '查看角色', 'resource': 'role', 'action': 'view', 'description': '查看角色列表和详情'}, {'name': 'role.create', 'display_name': '创建角色', 'resource': 'role', 'action': 'create', 'description': '创建新角色'}, {'name': 'role.edit', 'display_name': '编辑角色', 'resource': 'role', 'action': 'edit', 'description': '编辑角色信息'}, {'name': 'role.delete', 'display_name': '删除角色', 'resource': 'role', 'action': 'delete', 'description': '删除角色'}, {'name': 'role.assign_permission', 'display_name': '分配角色权限', 'resource': 'role', 'action': 'assign_permission', 'description': '为角色分配权限'}, {'name': 'role.assign_menu', 'display_name': '分配角色菜单', 'resource': 'role', 'action': 'assign_menu', 'description': '为角色分配菜单'}, # 菜单管理权限 {'name': 'menu.view', 'display_name': '查看菜单', 'resource': 'menu', 'action': 'view', 'description': '查看菜单列表和详情'}, {'name': 'menu.create', 'display_name': '创建菜单', 'resource': 'menu', 'action': 'create', 'description': '创建新菜单'}, {'name': 'menu.edit', 'display_name': '编辑菜单', 'resource': 'menu', 'action': 'edit', 'description': '编辑菜单信息'}, {'name': 'menu.delete', 'display_name': '删除菜单', 'resource': 'menu', 'action': 'delete', 'description': '删除菜单'}, {'name': 'menu.sort', 'display_name': '排序菜单', 'resource': 'menu', 'action': 'sort', 'description': '调整菜单排序'}, # 权限管理权限 {'name': 'permission.view', 'display_name': '查看权限', 'resource': 'permission', 'action': 'view', 'description': '查看权限列表和详情'}, {'name': 'permission.create', 'display_name': '创建权限', 'resource': 'permission', 'action': 'create', 'description': '创建新权限'}, {'name': 'permission.edit', 'display_name': '编辑权限', 'resource': 'permission', 'action': 'edit', 'description': '编辑权限信息'}, {'name': 'permission.delete', 'display_name': '删除权限', 'resource': 'permission', 'action': 'delete', 'description': '删除权限'}, # 应用管理权限 {'name': 'app.view', 'display_name': '查看应用', 'resource': 'app', 'action': 'view', 'description': '查看应用列表和详情'}, {'name': 'app.create', 'display_name': '创建应用', 'resource': 'app', 'action': 'create', 'description': '创建OAuth2应用'}, {'name': 'app.edit', 'display_name': '编辑应用', 'resource': 'app', 'action': 'edit', 'description': '编辑应用信息'}, {'name': 'app.delete', 'display_name': '删除应用', 'resource': 'app', 'action': 'delete', 'description': '删除应用'}, {'name': 'app.secret', 'display_name': '查看应用密钥', 'resource': 'app', 'action': 'secret', 'description': '查看应用密钥'}, {'name': 'app.reset_secret', 'display_name': '重置应用密钥', 'resource': 'app', 'action': 'reset_secret', 'description': '重置应用密钥'}, # 系统管理权限 {'name': 'system.view', 'display_name': '查看系统信息', 'resource': 'system', 'action': 'view', 'description': '查看系统信息和统计'}, {'name': 'system.config', 'display_name': '系统配置', 'resource': 'system', 'action': 'config', 'description': '修改系统配置'}, {'name': 'system.log', 'display_name': '查看系统日志', 'resource': 'system', 'action': 'log', 'description': '查看系统操作日志'}, ] permission_ids = {} for perm in permissions_data: perm_id = str(uuid.uuid4()) cursor.execute(""" INSERT INTO permissions (id, name, display_name, resource, action, description, is_active, created_at, updated_at) VALUES (%s, %s, %s, %s, %s, %s, %s, NOW(), NOW()) """, (perm_id, perm['name'], perm['display_name'], perm['resource'], perm['action'], perm['description'], True)) permission_ids[perm['name']] = perm_id print(f" ✅ 插入了 {len(permissions_data)} 个权限") return permission_ids def assign_role_permissions(cursor, role_ids, permission_ids): """分配角色权限""" print("🔗 分配角色权限...") # 超级管理员拥有所有权限 super_admin_id = role_ids['super_admin'] for perm_name, perm_id in permission_ids.items(): cursor.execute(""" INSERT INTO role_permissions (role_id, permission_id, created_at) VALUES (%s, %s, NOW()) """, (super_admin_id, perm_id)) # 管理员拥有大部分权限(除了系统配置) admin_id = role_ids['admin'] admin_permissions = [perm for perm in permission_ids.keys() if not perm.startswith('system.config')] for perm_name in admin_permissions: cursor.execute(""" INSERT INTO role_permissions (role_id, permission_id, created_at) VALUES (%s, %s, NOW()) """, (admin_id, permission_ids[perm_name])) # 用户管理员只有用户相关权限 user_manager_id = role_ids['user_manager'] user_permissions = [perm for perm in permission_ids.keys() if perm.startswith('user.') or perm.startswith('role.')] for perm_name in user_permissions: cursor.execute(""" INSERT INTO role_permissions (role_id, permission_id, created_at) VALUES (%s, %s, NOW()) """, (user_manager_id, permission_ids[perm_name])) # 应用管理员只有应用相关权限 app_manager_id = role_ids['app_manager'] app_permissions = [perm for perm in permission_ids.keys() if perm.startswith('app.')] for perm_name in app_permissions: cursor.execute(""" INSERT INTO role_permissions (role_id, permission_id, created_at) VALUES (%s, %s, NOW()) """, (app_manager_id, permission_ids[perm_name])) print(" ✅ 角色权限分配完成") def assign_role_menus(cursor, role_ids): """分配角色菜单""" print("🔗 分配角色菜单...") # 获取所有菜单ID cursor.execute("SELECT id, parent_id FROM menus") all_menus = cursor.fetchall() menu_ids = [menu[0] for menu in all_menus] # 超级管理员和管理员拥有所有菜单 for role_name in ['super_admin', 'admin']: role_id = role_ids[role_name] for menu_id in menu_ids: cursor.execute(""" INSERT INTO role_menus (role_id, menu_id, created_at) VALUES (%s, %s, NOW()) """, (role_id, menu_id)) # 用户管理员只有基础菜单和用户管理相关菜单 user_manager_id = role_ids['user_manager'] user_manager_menus = [ 'dashboard-menu', 'profile-menu', 'admin-menu', 'admin-dashboard-menu', 'admin-users-menu', 'admin-roles-menu' ] # 添加用户管理相关的按钮权限 cursor.execute("SELECT id FROM menus WHERE parent_id IN ('admin-users-menu', 'admin-roles-menu')") user_buttons = cursor.fetchall() user_manager_menus.extend([btn[0] for btn in user_buttons]) for menu_id in user_manager_menus: cursor.execute(""" INSERT INTO role_menus (role_id, menu_id, created_at) VALUES (%s, %s, NOW()) """, (user_manager_id, menu_id)) # 应用管理员只有基础菜单和应用管理相关菜单 app_manager_id = role_ids['app_manager'] app_manager_menus = [ 'dashboard-menu', 'profile-menu', 'admin-menu', 'admin-dashboard-menu', 'admin-apps-menu' ] # 添加应用管理相关的按钮权限 cursor.execute("SELECT id FROM menus WHERE parent_id = 'admin-apps-menu'") app_buttons = cursor.fetchall() app_manager_menus.extend([btn[0] for btn in app_buttons]) for menu_id in app_manager_menus: cursor.execute(""" INSERT INTO role_menus (role_id, menu_id, created_at) VALUES (%s, %s, NOW()) """, (app_manager_id, menu_id)) # 普通用户只有基础菜单 user_id = role_ids['user'] user_menus = ['dashboard-menu', 'profile-menu'] for menu_id in user_menus: cursor.execute(""" INSERT INTO role_menus (role_id, menu_id, created_at) VALUES (%s, %s, NOW()) """, (user_id, menu_id)) print(" ✅ 角色菜单分配完成") def assign_user_roles(cursor, role_ids): """为现有用户分配角色""" print("👤 为用户分配角色...") # 获取admin用户 cursor.execute("SELECT id FROM users WHERE username = 'admin'") admin_user = cursor.fetchone() if admin_user: admin_user_id = admin_user[0] # 为admin用户分配超级管理员角色 cursor.execute(""" INSERT INTO user_roles (user_id, role_id, is_active, created_at) VALUES (%s, %s, %s, NOW()) """, (admin_user_id, role_ids['super_admin'], True)) print(f" ✅ 为admin用户分配了超级管理员角色") # 获取其他用户并分配普通用户角色 cursor.execute("SELECT id, username FROM users WHERE username != 'admin'") other_users = cursor.fetchall() for user in other_users: user_id, username = user cursor.execute(""" INSERT INTO user_roles (user_id, role_id, is_active, created_at) VALUES (%s, %s, %s, NOW()) """, (user_id, role_ids['user'], True)) print(f" ✅ 为用户 {username} 分配了普通用户角色") def reinit_rbac_data(): """重新初始化RBAC数据""" print("🚀 开始重新初始化RBAC数据") print("=" * 60) conn = get_db_connection() if not conn: print("❌ 数据库连接失败") return False cursor = conn.cursor() try: # 1. 清理现有数据 clear_rbac_data(cursor) # 2. 插入菜单数据 insert_menus(cursor) # 3. 插入角色数据 role_ids = insert_roles(cursor) # 4. 插入权限数据 permission_ids = insert_permissions(cursor) # 5. 分配角色权限 assign_role_permissions(cursor, role_ids, permission_ids) # 6. 分配角色菜单 assign_role_menus(cursor, role_ids) # 7. 为用户分配角色 assign_user_roles(cursor, role_ids) conn.commit() print("\n" + "=" * 60) print("🎉 RBAC数据重新初始化完成!") print("=" * 60) print("📊 数据统计:") # 统计数据 cursor.execute("SELECT COUNT(*) FROM menus") menu_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM menus WHERE menu_type = 'menu'") menu_menu_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM menus WHERE menu_type = 'button'") button_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM roles") role_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM permissions") permission_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM role_permissions") role_permission_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM role_menus") role_menu_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM user_roles") user_role_count = cursor.fetchone()[0] print(f" 📋 菜单总数: {menu_count} (菜单: {menu_menu_count}, 按钮: {button_count})") print(f" 👥 角色数量: {role_count}") print(f" 🔐 权限数量: {permission_count}") print(f" 🔗 角色权限关联: {role_permission_count}") print(f" 🔗 角色菜单关联: {role_menu_count}") print(f" 👤 用户角色关联: {user_role_count}") print("=" * 60) return True except Exception as e: print(f"❌ 初始化失败: {e}") conn.rollback() return False finally: cursor.close() conn.close() def main(): """主函数""" success = reinit_rbac_data() if success: print("\n🎯 重新初始化成功!现在可以测试完整的树形菜单结构了。") print("💡 建议重启前端服务以刷新菜单缓存。") else: print("\n❌ 重新初始化失败!") if __name__ == "__main__": main()