| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183 |
- #!/usr/bin/env python3
- """
- 根据需求/菜单.md重新初始化菜单数据
- 严格按照需求文档的菜单结构设计
- """
- 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-main',
- '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-main',
- '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-main',
- 'parent_id': None,
- 'name': 'admin',
- 'title': '系统管理',
- 'path': '/admin',
- 'component': None,
- 'icon': 'Setting',
- 'sort_order': 3,
- 'menu_type': 'menu',
- 'is_hidden': False,
- 'description': '系统管理功能'
- },
-
- # ==================== 个人资料的按钮权限 ====================
- {
- 'id': 'profile-save-btn',
- 'parent_id': 'profile-main',
- 'name': 'profile-save',
- 'title': '保存修改',
- 'path': None,
- 'component': None,
- 'icon': 'Check',
- 'sort_order': 1,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '保存个人资料修改'
- },
- {
- 'id': 'profile-reset-btn',
- 'parent_id': 'profile-main',
- 'name': 'profile-reset',
- 'title': '重置',
- 'path': None,
- 'component': None,
- 'icon': 'RefreshLeft',
- 'sort_order': 2,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '重置个人资料表单'
- },
- {
- 'id': 'profile-change-password-btn',
- 'parent_id': 'profile-main',
- 'name': 'profile-change-password',
- 'title': '修改密码',
- 'path': None,
- 'component': None,
- 'icon': 'Key',
- 'sort_order': 3,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '修改登录密码'
- },
-
- # ==================== 第二级:系统管理下的功能菜单 ====================
- {
- 'id': 'admin-dashboard',
- 'parent_id': 'admin-main',
- 'name': 'admin-dashboard',
- 'title': '管理概览',
- 'path': '/admin/dashboard',
- 'component': 'admin/Dashboard',
- 'icon': 'Monitor',
- 'sort_order': 1,
- 'menu_type': 'menu',
- 'is_hidden': False,
- 'description': '管理员仪表盘'
- },
- {
- 'id': 'user-management',
- 'parent_id': 'admin-main',
- 'name': 'user-management',
- 'title': '用户管理',
- 'path': '/admin/users',
- 'component': 'admin/Users',
- 'icon': 'UserFilled',
- 'sort_order': 2,
- 'menu_type': 'menu',
- 'is_hidden': False,
- 'description': '用户信息管理'
- },
- {
- 'id': 'role-management',
- 'parent_id': 'admin-main',
- 'name': 'role-management',
- 'title': '角色管理',
- 'path': '/admin/roles',
- 'component': 'admin/Roles',
- 'icon': 'Avatar',
- 'sort_order': 3,
- 'menu_type': 'menu',
- 'is_hidden': False,
- 'description': '角色权限管理'
- },
- {
- 'id': 'menu-management',
- 'parent_id': 'admin-main',
- 'name': 'menu-management',
- 'title': '菜单管理',
- 'path': '/admin/menus',
- 'component': 'admin/Menus',
- 'icon': 'Menu',
- 'sort_order': 4,
- 'menu_type': 'menu',
- 'is_hidden': False,
- 'description': '菜单结构管理'
- },
- {
- 'id': 'permission-management',
- 'parent_id': 'admin-main',
- 'name': 'permission-management',
- 'title': '权限管理',
- 'path': '/admin/permissions',
- 'component': 'admin/Permissions',
- 'icon': 'Key',
- 'sort_order': 5,
- 'menu_type': 'menu',
- 'is_hidden': False,
- 'description': '权限配置管理'
- },
- {
- 'id': 'app-management',
- 'parent_id': 'admin-main',
- 'name': 'app-management',
- 'title': '应用管理',
- 'path': '/admin/apps',
- 'component': 'admin/Apps',
- 'icon': 'Grid',
- 'sort_order': 6,
- 'menu_type': 'menu',
- 'is_hidden': False,
- 'description': 'OAuth2应用管理'
- },
- {
- 'id': 'log-management',
- 'parent_id': 'admin-main',
- 'name': 'log-management',
- 'title': '系统日志',
- 'path': '/admin/logs',
- 'component': 'admin/Logs',
- 'icon': 'Document',
- 'sort_order': 7,
- 'menu_type': 'menu',
- 'is_hidden': False,
- 'description': '系统操作日志'
- },
- {
- 'id': 'system-settings',
- 'parent_id': 'admin-main',
- 'name': 'system-settings',
- 'title': '系统设置',
- 'path': '/admin/settings',
- 'component': 'admin/Settings',
- 'icon': 'Tools',
- 'sort_order': 8,
- 'menu_type': 'menu',
- 'is_hidden': False,
- 'description': '系统配置设置'
- },
-
- # ==================== 管理概览的按钮权限 ====================
- {
- 'id': 'admin-dashboard-user-mgmt-btn',
- 'parent_id': 'admin-dashboard',
- 'name': 'admin-dashboard-user-mgmt',
- 'title': '用户管理',
- 'path': None,
- 'component': None,
- 'icon': 'UserFilled',
- 'sort_order': 1,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '快速跳转到用户管理'
- },
- {
- 'id': 'admin-dashboard-create-user-btn',
- 'parent_id': 'admin-dashboard',
- 'name': 'admin-dashboard-create-user',
- 'title': '创建用户',
- 'path': None,
- 'component': None,
- 'icon': 'Plus',
- 'sort_order': 2,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '快速创建用户'
- },
- {
- 'id': 'admin-dashboard-app-mgmt-btn',
- 'parent_id': 'admin-dashboard',
- 'name': 'admin-dashboard-app-mgmt',
- 'title': '应用管理',
- 'path': None,
- 'component': None,
- 'icon': 'Grid',
- 'sort_order': 3,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '快速跳转到应用管理'
- },
- {
- 'id': 'admin-dashboard-create-app-btn',
- 'parent_id': 'admin-dashboard',
- 'name': 'admin-dashboard-create-app',
- 'title': '创建应用',
- 'path': None,
- 'component': None,
- 'icon': 'Plus',
- 'sort_order': 4,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '快速创建应用'
- },
- {
- 'id': 'admin-dashboard-view-logs-btn',
- 'parent_id': 'admin-dashboard',
- 'name': 'admin-dashboard-view-logs',
- 'title': '查看日志',
- 'path': None,
- 'component': None,
- 'icon': 'View',
- 'sort_order': 5,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '快速查看系统日志'
- },
- {
- 'id': 'admin-dashboard-export-logs-btn',
- 'parent_id': 'admin-dashboard',
- 'name': 'admin-dashboard-export-logs',
- 'title': '导出日志',
- 'path': None,
- 'component': None,
- 'icon': 'Download',
- 'sort_order': 6,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '快速导出日志'
- },
- {
- 'id': 'admin-dashboard-settings-btn',
- 'parent_id': 'admin-dashboard',
- 'name': 'admin-dashboard-settings',
- 'title': '系统设置',
- 'path': None,
- 'component': None,
- 'icon': 'Tools',
- 'sort_order': 7,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '快速跳转到系统设置'
- },
-
- # ==================== 用户管理的按钮权限 ====================
- {
- 'id': 'user-create-btn',
- 'parent_id': 'user-management',
- 'name': 'user-create',
- 'title': '创建用户',
- 'path': None,
- 'component': None,
- 'icon': 'Plus',
- 'sort_order': 1,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '创建新用户'
- },
- {
- 'id': 'user-edit-btn',
- 'parent_id': 'user-management',
- 'name': 'user-edit',
- 'title': '编辑用户',
- 'path': None,
- 'component': None,
- 'icon': 'Edit',
- 'sort_order': 2,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '编辑用户信息'
- },
- {
- 'id': 'user-delete-btn',
- 'parent_id': 'user-management',
- 'name': 'user-delete',
- 'title': '删除用户',
- 'path': None,
- 'component': None,
- 'icon': 'Delete',
- 'sort_order': 3,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '删除用户'
- },
- {
- 'id': 'user-batch-delete-btn',
- 'parent_id': 'user-management',
- 'name': 'user-batch-delete',
- 'title': '批量删除用户',
- 'path': None,
- 'component': None,
- 'icon': 'DeleteFilled',
- 'sort_order': 4,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '批量删除用户'
- },
- {
- 'id': 'user-assign-role-btn',
- 'parent_id': 'user-management',
- 'name': 'user-assign-role',
- 'title': '分配角色',
- 'path': None,
- 'component': None,
- 'icon': 'Avatar',
- 'sort_order': 5,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '为用户分配角色'
- },
- {
- 'id': 'user-reset-password-btn',
- 'parent_id': 'user-management',
- 'name': 'user-reset-password',
- 'title': '重置密码',
- 'path': None,
- 'component': None,
- 'icon': 'Key',
- 'sort_order': 6,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '重置用户密码'
- },
-
- # ==================== 角色管理的按钮权限 ====================
- {
- 'id': 'role-create-btn',
- 'parent_id': 'role-management',
- 'name': 'role-create',
- 'title': '创建角色',
- 'path': None,
- 'component': None,
- 'icon': 'Plus',
- 'sort_order': 1,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '创建新角色'
- },
- {
- 'id': 'role-edit-btn',
- 'parent_id': 'role-management',
- 'name': 'role-edit',
- 'title': '编辑角色',
- 'path': None,
- 'component': None,
- 'icon': 'Edit',
- 'sort_order': 2,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '编辑角色信息'
- },
- {
- 'id': 'role-delete-btn',
- 'parent_id': 'role-management',
- 'name': 'role-delete',
- 'title': '删除角色',
- 'path': None,
- 'component': None,
- 'icon': 'Delete',
- 'sort_order': 3,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '删除角色'
- },
- {
- 'id': 'role-permission-mgmt-btn',
- 'parent_id': 'role-management',
- 'name': 'role-permission-mgmt',
- 'title': '权限管理',
- 'path': None,
- 'component': None,
- 'icon': 'Key',
- 'sort_order': 4,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '管理角色权限'
- },
-
- # ==================== 菜单管理的按钮权限 ====================
- {
- 'id': 'menu-create-btn',
- 'parent_id': 'menu-management',
- 'name': 'menu-create',
- 'title': '创建菜单',
- 'path': None,
- 'component': None,
- 'icon': 'Plus',
- 'sort_order': 1,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '创建新菜单'
- },
- {
- 'id': 'menu-edit-btn',
- 'parent_id': 'menu-management',
- 'name': 'menu-edit',
- 'title': '编辑菜单',
- 'path': None,
- 'component': None,
- 'icon': 'Edit',
- 'sort_order': 2,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '编辑菜单信息'
- },
- {
- 'id': 'menu-delete-btn',
- 'parent_id': 'menu-management',
- 'name': 'menu-delete',
- 'title': '删除菜单',
- 'path': None,
- 'component': None,
- 'icon': 'Delete',
- 'sort_order': 3,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '删除菜单'
- },
- {
- 'id': 'menu-sort-btn',
- 'parent_id': 'menu-management',
- 'name': 'menu-sort',
- 'title': '排序菜单',
- 'path': None,
- 'component': None,
- 'icon': 'Sort',
- 'sort_order': 4,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '调整菜单排序'
- },
-
- # ==================== 权限管理的按钮权限 ====================
- {
- 'id': 'permission-create-btn',
- 'parent_id': 'permission-management',
- 'name': 'permission-create',
- 'title': '创建权限',
- 'path': None,
- 'component': None,
- 'icon': 'Plus',
- 'sort_order': 1,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '创建新权限'
- },
- {
- 'id': 'permission-edit-btn',
- 'parent_id': 'permission-management',
- 'name': 'permission-edit',
- 'title': '编辑权限',
- 'path': None,
- 'component': None,
- 'icon': 'Edit',
- 'sort_order': 2,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '编辑权限信息'
- },
- {
- 'id': 'permission-delete-btn',
- 'parent_id': 'permission-management',
- 'name': 'permission-delete',
- 'title': '删除权限',
- 'path': None,
- 'component': None,
- 'icon': 'Delete',
- 'sort_order': 3,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '删除权限'
- },
- {
- 'id': 'permission-view-roles-btn',
- 'parent_id': 'permission-management',
- 'name': 'permission-view-roles',
- 'title': '查看角色',
- 'path': None,
- 'component': None,
- 'icon': 'View',
- 'sort_order': 4,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '查看权限关联的角色'
- },
-
- # ==================== 应用管理的按钮权限 ====================
- {
- 'id': 'app-create-btn',
- 'parent_id': 'app-management',
- 'name': 'app-create',
- 'title': '创建应用',
- 'path': None,
- 'component': None,
- 'icon': 'Plus',
- 'sort_order': 1,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '创建OAuth2应用'
- },
- {
- 'id': 'app-edit-btn',
- 'parent_id': 'app-management',
- 'name': 'app-edit',
- 'title': '编辑应用',
- 'path': None,
- 'component': None,
- 'icon': 'Edit',
- 'sort_order': 2,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '编辑应用信息'
- },
- {
- 'id': 'app-delete-btn',
- 'parent_id': 'app-management',
- 'name': 'app-delete',
- 'title': '删除应用',
- 'path': None,
- 'component': None,
- 'icon': 'Delete',
- 'sort_order': 3,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '删除应用'
- },
- {
- 'id': 'app-view-secret-btn',
- 'parent_id': 'app-management',
- 'name': 'app-view-secret',
- 'title': '查看密钥',
- 'path': None,
- 'component': None,
- 'icon': 'View',
- 'sort_order': 4,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '查看应用密钥'
- },
- {
- 'id': 'app-reset-secret-btn',
- 'parent_id': 'app-management',
- 'name': 'app-reset-secret',
- 'title': '重置密钥',
- 'path': None,
- 'component': None,
- 'icon': 'RefreshRight',
- 'sort_order': 5,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '重置应用密钥'
- },
- {
- 'id': 'app-view-logs-btn',
- 'parent_id': 'app-management',
- 'name': 'app-view-logs',
- 'title': '查看日志',
- 'path': None,
- 'component': None,
- 'icon': 'Document',
- 'sort_order': 6,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '查看应用相关日志'
- },
-
- # ==================== 系统日志的按钮权限 ====================
- {
- 'id': 'log-view-btn',
- 'parent_id': 'log-management',
- 'name': 'log-view',
- 'title': '查看日志',
- 'path': None,
- 'component': None,
- 'icon': 'View',
- 'sort_order': 1,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '查看系统日志'
- },
- {
- 'id': 'log-export-btn',
- 'parent_id': 'log-management',
- 'name': 'log-export',
- 'title': '导出日志',
- 'path': None,
- 'component': None,
- 'icon': 'Download',
- 'sort_order': 2,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '导出系统日志'
- },
- {
- 'id': 'log-clear-btn',
- 'parent_id': 'log-management',
- 'name': 'log-clear',
- 'title': '清理日志',
- 'path': None,
- 'component': None,
- 'icon': 'Delete',
- 'sort_order': 3,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '清理历史日志'
- },
-
- # ==================== 系统设置的按钮权限 ====================
- {
- 'id': 'settings-view-btn',
- 'parent_id': 'system-settings',
- 'name': 'settings-view',
- 'title': '查看设置',
- 'path': None,
- 'component': None,
- 'icon': 'View',
- 'sort_order': 1,
- 'menu_type': 'button',
- 'is_hidden': False,
- 'description': '查看系统设置'
- },
- {
- 'id': 'settings-edit-btn',
- 'parent_id': 'system-settings',
- 'name': 'settings-edit',
- 'title': '修改设置',
- 'path': None,
- 'component': None,
- 'icon': 'Edit',
- 'sort_order': 2,
- '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)} 个菜单项")
-
- # 统计各级菜单数量
- main_menus = len([m for m in menus_data if not m['parent_id']])
- function_menus = len([m for m in menus_data if m['parent_id'] and m['menu_type'] == 'menu'])
- button_permissions = len([m for m in menus_data if m['menu_type'] == 'button'])
-
- print(f" 📊 菜单结构统计:")
- print(f" 📁 主菜单: {main_menus} 个")
- print(f" 📄 功能菜单: {function_menus} 个")
- print(f" 🔘 按钮权限: {button_permissions} 个")
- 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': 'profile.save', 'display_name': '保存个人资料', 'resource': 'profile', 'action': 'save', 'description': '保存个人资料修改'},
- {'name': 'profile.reset', 'display_name': '重置个人资料', 'resource': 'profile', 'action': 'reset', 'description': '重置个人资料表单'},
- {'name': 'profile.change_password', 'display_name': '修改密码', 'resource': 'profile', 'action': 'change_password', 'description': '修改登录密码'},
-
- # 管理概览权限
- {'name': 'admin.dashboard', 'display_name': '管理概览', 'resource': 'admin', 'action': 'dashboard', 'description': '查看管理概览'},
- {'name': 'admin.quick_user_mgmt', 'display_name': '快速用户管理', 'resource': 'admin', 'action': 'quick_user_mgmt', 'description': '快速跳转到用户管理'},
- {'name': 'admin.quick_create_user', 'display_name': '快速创建用户', 'resource': 'admin', 'action': 'quick_create_user', 'description': '快速创建用户'},
- {'name': 'admin.quick_app_mgmt', 'display_name': '快速应用管理', 'resource': 'admin', 'action': 'quick_app_mgmt', 'description': '快速跳转到应用管理'},
- {'name': 'admin.quick_create_app', 'display_name': '快速创建应用', 'resource': 'admin', 'action': 'quick_create_app', 'description': '快速创建应用'},
- {'name': 'admin.quick_view_logs', 'display_name': '快速查看日志', 'resource': 'admin', 'action': 'quick_view_logs', 'description': '快速查看系统日志'},
- {'name': 'admin.quick_export_logs', 'display_name': '快速导出日志', 'resource': 'admin', 'action': 'quick_export_logs', 'description': '快速导出日志'},
- {'name': 'admin.quick_settings', 'display_name': '快速系统设置', 'resource': 'admin', 'action': 'quick_settings', 'description': '快速跳转到系统设置'},
-
- # 用户管理权限
- {'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.permission_mgmt', 'display_name': '角色权限管理', 'resource': 'role', 'action': 'permission_mgmt', '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': 'permission.view_roles', 'display_name': '查看权限角色', 'resource': 'permission', 'action': 'view_roles', '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.view_secret', 'display_name': '查看应用密钥', 'resource': 'app', 'action': 'view_secret', 'description': '查看应用密钥'},
- {'name': 'app.reset_secret', 'display_name': '重置应用密钥', 'resource': 'app', 'action': 'reset_secret', 'description': '重置应用密钥'},
- {'name': 'app.view_logs', 'display_name': '查看应用日志', 'resource': 'app', 'action': 'view_logs', 'description': '查看应用相关日志'},
-
- # 系统日志权限
- {'name': 'log.view', 'display_name': '查看系统日志', 'resource': 'log', 'action': 'view', 'description': '查看系统操作日志'},
- {'name': 'log.export', 'display_name': '导出系统日志', 'resource': 'log', 'action': 'export', 'description': '导出系统日志'},
- {'name': 'log.clear', 'display_name': '清理系统日志', 'resource': 'log', 'action': 'clear', 'description': '清理历史日志'},
-
- # 系统设置权限
- {'name': 'settings.view', 'display_name': '查看系统设置', 'resource': 'settings', 'action': 'view', 'description': '查看系统配置'},
- {'name': 'settings.edit', 'display_name': '修改系统设置', 'resource': 'settings', 'action': 'edit', '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('settings.edit')]
- 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.', 'role.', 'admin.dashboard', 'admin.quick_user', 'profile.'))]
- 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.', 'admin.dashboard', 'admin.quick_app', 'profile.'))]
- 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]))
-
- # 普通用户只有基础权限
- user_id = role_ids['user']
- user_permissions = [perm for perm in permission_ids.keys() if perm.startswith('profile.')]
- for perm_name in user_permissions:
- cursor.execute("""
- INSERT INTO role_permissions (role_id, permission_id, created_at)
- VALUES (%s, %s, NOW())
- """, (user_id, permission_ids[perm_name]))
-
- print(" ✅ 角色权限分配完成")
- def assign_role_menus(cursor, role_ids):
- """分配角色菜单"""
- print("🔗 分配角色菜单...")
-
- # 获取所有菜单ID
- cursor.execute("SELECT id, parent_id, menu_type 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-main', 'profile-main', 'admin-main', 'admin-dashboard',
- 'user-management', 'role-management'
- ]
- # 添加相关的按钮权限
- cursor.execute("SELECT id FROM menus WHERE parent_id IN ('profile-main', 'admin-dashboard', 'user-management', 'role-management')")
- 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-main', 'profile-main', 'admin-main', 'admin-dashboard',
- 'app-management'
- ]
- # 添加相关的按钮权限
- cursor.execute("SELECT id FROM menus WHERE parent_id IN ('profile-main', 'admin-dashboard', 'app-management')")
- 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-main', 'profile-main']
- # 添加个人资料的按钮权限
- cursor.execute("SELECT id FROM menus WHERE parent_id = 'profile-main'")
- profile_buttons = cursor.fetchall()
- user_menus.extend([btn[0] for btn in profile_buttons])
-
- 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 print_menu_structure(cursor):
- """打印菜单结构验证"""
- print("\n🌳 根据需求文档的菜单结构:")
- print("=" * 60)
-
- # 获取所有菜单
- cursor.execute("""
- SELECT id, parent_id, title, menu_type, sort_order
- FROM menus
- ORDER BY
- CASE WHEN parent_id IS NULL THEN 0 ELSE 1 END,
- sort_order,
- CASE WHEN menu_type = 'menu' THEN 0 ELSE 1 END
- """)
- all_menus = cursor.fetchall()
-
- # 构建菜单树
- menu_dict = {}
- for menu in all_menus:
- menu_id, parent_id, title, menu_type, sort_order = menu
- menu_dict[menu_id] = {
- 'id': menu_id,
- 'parent_id': parent_id,
- 'title': title,
- 'menu_type': menu_type,
- 'sort_order': sort_order,
- 'children': []
- }
-
- # 建立父子关系
- root_menus = []
- for menu_id, menu_data in menu_dict.items():
- if menu_data['parent_id']:
- if menu_data['parent_id'] in menu_dict:
- menu_dict[menu_data['parent_id']]['children'].append(menu_data)
- else:
- root_menus.append(menu_data)
-
- # 打印树形结构
- def print_menu_tree(menus, level=0):
- for menu in sorted(menus, key=lambda x: x['sort_order']):
- indent = " " * level
- if menu['menu_type'] == 'menu' and level == 0:
- icon = "📄" if menu['title'] == '仪表盘' else "📁"
- elif menu['menu_type'] == 'menu':
- icon = "📄"
- else:
- icon = "🔘"
-
- print(f"{indent}{icon} {menu['title']} ({menu['menu_type']})")
-
- if menu['children']:
- # 先显示菜单类型的子项,再显示按钮类型的子项
- menu_children = [c for c in menu['children'] if c['menu_type'] == 'menu']
- button_children = [c for c in menu['children'] if c['menu_type'] == 'button']
- print_menu_tree(menu_children, level + 1)
- print_menu_tree(button_children, level + 1)
-
- print_menu_tree(root_menus)
- def reinit_menus_by_requirements():
- """根据需求文档重新初始化菜单数据"""
- print("🚀 根据需求/菜单.md重新初始化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)
-
- # 8. 打印菜单结构验证
- print_menu_structure(cursor)
-
- 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' AND parent_id IS NULL")
- main_menu_count = cursor.fetchone()[0]
- cursor.execute("SELECT COUNT(*) FROM menus WHERE menu_type = 'menu' AND parent_id IS NOT NULL")
- function_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]
-
- print(f" 📁 主菜单: {main_menu_count} 个")
- print(f" 📄 功能菜单: {function_menu_count} 个")
- print(f" 🔘 按钮权限: {button_count} 个")
- print(f" 📋 菜单总数: {menu_count} 个")
- print(f" 👥 角色数量: {role_count} 个")
- print(f" 🔐 权限数量: {permission_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_menus_by_requirements()
- if success:
- print("\n🎯 根据需求文档的菜单初始化成功!")
- print("💡 建议重启前端服务以刷新菜单缓存。")
- print("\n🌐 访问地址:")
- print(" 前端: http://localhost:3000")
- print(" 菜单管理: http://localhost:3000/admin/menus")
- print("\n🔑 登录信息:")
- print(" 用户名: admin")
- print(" 密码: Admin123456")
- print("\n📋 需求文档对应:")
- print(" - 严格按照 OAuth2_system/需求/菜单.md 的结构设计")
- print(" - 包含个人资料的按钮权限(保存修改、重置、修改密码)")
- print(" - 管理概览包含快速操作按钮")
- print(" - 所有功能菜单都有对应的按钮权限")
- else:
- print("\n❌ 根据需求文档的菜单初始化失败!")
- if __name__ == "__main__":
- main()
|