/** * 初始化角色菜单权限数据 * @file init-role-menu-permissions.js * @description 为角色分配菜单权限 */ const { Role, MenuPermission, RoleMenuPermission } = require('../models'); async function initRoleMenuPermissions() { try { console.log('开始初始化角色菜单权限数据...'); // 获取所有角色 const roles = await Role.findAll(); console.log('找到角色:', roles.map(r => ({ id: r.id, name: r.name }))); // 获取所有菜单权限 const menus = await MenuPermission.findAll(); console.log('找到菜单权限:', menus.map(m => ({ id: m.id, name: m.menu_name }))); if (roles.length === 0 || menus.length === 0) { console.log('没有找到角色或菜单权限,跳过初始化'); return; } // 清空现有关联数据 await RoleMenuPermission.destroy({ where: {} }); console.log('已清空现有角色菜单权限关联数据'); // 为每个角色分配权限 for (const role of roles) { let menuIds = []; if (role.name === 'admin') { // 管理员拥有所有权限 menuIds = menus.map(m => m.id); console.log(`为管理员角色分配所有 ${menuIds.length} 个菜单权限`); } else if (role.name === 'manager') { // 经理拥有除系统管理外的所有权限 menuIds = menus.filter(m => !m.menu_key.includes('system')).map(m => m.id); console.log(`为经理角色分配 ${menuIds.length} 个菜单权限`); } else if (role.name === 'operator') { // 操作员拥有基础权限 const basicMenus = menus.filter(m => m.menu_key.includes('dashboard') || m.menu_key.includes('smart_device') || m.menu_key.includes('smart_alert') || m.menu_key.includes('animal.management') || m.menu_key.includes('cattle.') ); menuIds = basicMenus.map(m => m.id); console.log(`为操作员角色分配 ${menuIds.length} 个菜单权限`); } // 创建角色菜单权限关联 if (menuIds.length > 0) { const roleMenuPermissions = menuIds.map(menuId => ({ role_id: role.id, menu_permission_id: menuId })); await RoleMenuPermission.bulkCreate(roleMenuPermissions); console.log(`已为角色 ${role.name} 创建 ${roleMenuPermissions.length} 个权限关联`); } } console.log('角色菜单权限数据初始化完成!'); // 验证结果 const totalAssociations = await RoleMenuPermission.count(); console.log(`总共创建了 ${totalAssociations} 个角色菜单权限关联`); // 显示每个角色的权限数量 for (const role of roles) { const count = await RoleMenuPermission.count({ where: { role_id: role.id } }); console.log(`角色 ${role.name} 拥有 ${count} 个菜单权限`); } } catch (error) { console.error('初始化角色菜单权限数据失败:', error); } finally { process.exit(0); } } // 运行脚本 initRoleMenuPermissions();