// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck import * as dotenv from 'dotenv'; import * as path from 'path'; const nodeEnv = process.env.NODE_ENV || 'development'; const envFile = `.env.${nodeEnv}`; const backendDir = path.resolve(__dirname, '..'); const envPath = path.resolve(backendDir, envFile); dotenv.config({ path: envPath }); if (!process.env.DATABASE_URL) { dotenv.config({ path: path.resolve(backendDir, '.env') }); } if (!process.env.DATABASE_URL) { console.error('DATABASE_URL not found'); process.exit(1); } import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); // 超级管理员专属权限(普通租户不应该有这些权限) const superAdminOnlyPermissions = [ 'tenant:create', 'tenant:update', 'tenant:delete', ]; async function cleanupTenantPermissions() { try { console.log('🚀 开始清理普通租户的超级管理员权限...\n'); // 1. 获取所有非超级租户 const normalTenants = await prisma.tenant.findMany({ where: { isSuper: { not: 1 }, validState: 1, }, }); console.log(`找到 ${normalTenants.length} 个普通租户\n`); for (const tenant of normalTenants) { console.log(`处理租户: ${tenant.name} (${tenant.code})`); // 2. 找到该租户下的超级管理员专属权限 const permissionsToRemove = await prisma.permission.findMany({ where: { tenantId: tenant.id, code: { in: superAdminOnlyPermissions }, }, }); if (permissionsToRemove.length === 0) { console.log(` ✓ 没有需要清理的权限\n`); continue; } const permissionIds = permissionsToRemove.map((p) => p.id); console.log(` 找到 ${permissionsToRemove.length} 个需要清理的权限: ${permissionsToRemove.map((p) => p.code).join(', ')}`); // 3. 删除角色-权限关联 const deletedRolePermissions = await prisma.rolePermission.deleteMany({ where: { permissionId: { in: permissionIds }, }, }); console.log(` 删除了 ${deletedRolePermissions.count} 条角色-权限关联`); // 4. 删除权限记录 const deletedPermissions = await prisma.permission.deleteMany({ where: { id: { in: permissionIds }, }, }); console.log(` 删除了 ${deletedPermissions.count} 条权限记录\n`); } // 5. 更新租户管理菜单权限 console.log('更新租户管理菜单权限...'); const tenantMenu = await prisma.menu.findFirst({ where: { name: '租户管理', path: '/system/tenants', }, }); if (tenantMenu) { if (tenantMenu.permission !== 'tenant:update') { await prisma.menu.update({ where: { id: tenantMenu.id }, data: { permission: 'tenant:update' }, }); console.log(`✅ 菜单权限已更新为 tenant:update (原: ${tenantMenu.permission})`); } else { console.log('✅ 菜单权限已经是 tenant:update'); } } else { console.log('⚠️ 未找到租户管理菜单'); } console.log('\n✅ 清理完成!'); console.log('\n说明:'); console.log(' - 普通租户现在只有 tenant:read 权限(用于读取租户列表)'); console.log(' - 租户管理菜单需要 tenant:update 权限才能看到'); console.log(' - 只有超级租户才有 tenant:create/update/delete 权限'); } catch (error) { console.error('❌ 清理失败:', error); throw error; } finally { await prisma.$disconnect(); } } cleanupTenantPermissions() .then(() => { console.log('\n🎉 脚本执行完成!'); process.exit(0); }) .catch((error) => { console.error('\n💥 脚本执行失败:', error); process.exit(1); });