88 lines
3.1 KiB
JavaScript
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();
|