Files
nxxmdata/backend/scripts/init-role-menu-permissions.js
2025-09-12 20:08:42 +08:00

88 lines
3.1 KiB
JavaScript

/**
* 初始化角色菜单权限数据
* @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();