import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); async function main() { console.log('šŸ”§ ę·»åŠ å­¦ē”Ÿä½œäøščœå•...\n'); // čŽ·å–ę‰€ęœ‰ē§Ÿęˆ· const tenants = await prisma.tenant.findMany({ select: { id: true, name: true } }); for (const tenant of tenants) { console.log(`\nšŸ“ å¤„ē†ē§Ÿęˆ·: ${tenant.name} (ID: ${tenant.id})`); // 1. åˆ›å»ŗå­¦ē”Ÿä½œäøšęƒé™ļ¼ˆå¦‚ęžœäøå­˜åœØļ¼‰ let studentHomeworkPerm = await prisma.permission.findFirst({ where: { tenantId: tenant.id, code: 'homework:student:read' } }); if (!studentHomeworkPerm) { studentHomeworkPerm = await prisma.permission.create({ data: { tenantId: tenant.id, code: 'homework:student:read', name: 'å­¦ē”ŸęŸ„ēœ‹ä½œäøš', resource: 'homework:student', action: 'read', description: 'å­¦ē”ŸęŸ„ēœ‹ä½œäøšåˆ—č”Ø', } }); console.log(' āœ… åˆ›å»ŗęƒé™: homework:student:read'); } // 2. åˆ†é…ē»™å­¦ē”Ÿč§’č‰² const studentRole = await prisma.role.findFirst({ where: { tenantId: tenant.id, code: 'student' } }); if (studentRole) { const existing = await prisma.rolePermission.findFirst({ where: { roleId: studentRole.id, permissionId: studentHomeworkPerm.id } }); if (!existing) { await prisma.rolePermission.create({ data: { roleId: studentRole.id, permissionId: studentHomeworkPerm.id } }); console.log(' āœ… å·²åˆ†é…ē»™å­¦ē”Ÿč§’č‰²'); } } // 3. åˆ›å»ŗå­¦ē”Ÿä½œäøščœå• // å…ˆę£€ęŸ„ę˜Æå¦å·²å­˜åœØ const existingMenu = await prisma.menu.findFirst({ where: { path: '/student-homework' } }); if (!existingMenu) { const studentHomeworkMenu = await prisma.menu.create({ data: { name: 'ęˆ‘ēš„ä½œäøš', path: '/student-homework', component: 'homework/StudentList', icon: 'BookOutlined', permission: 'homework:student:read', sort: 15, // ę”¾åœØä½œäøšē®”ē†ä¹‹å‰ validState: 1, } }); console.log(' āœ… åˆ›å»ŗčœå•: ęˆ‘ēš„ä½œäøš'); // 4. å°†čœå•åˆ†é…ē»™ē§Ÿęˆ· await prisma.tenantMenu.create({ data: { tenantId: tenant.id, menuId: studentHomeworkMenu.id, } }); console.log(' āœ… čœå•å·²åˆ†é…ē»™ē§Ÿęˆ·'); } else { console.log(' ā­ļø čœå•å·²å­˜åœØ'); // ē”®äæčœå•å·²åˆ†é…ē»™ē§Ÿęˆ· const tenantMenu = await prisma.tenantMenu.findFirst({ where: { tenantId: tenant.id, menuId: existingMenu.id } }); if (!tenantMenu) { await prisma.tenantMenu.create({ data: { tenantId: tenant.id, menuId: existingMenu.id, } }); console.log(' āœ… čœå•å·²åˆ†é…ē»™ē§Ÿęˆ·'); } } } // 5. ē§»é™¤å­¦ē”Ÿč§’č‰²ēš„ homework:read ęƒé™ļ¼ˆčæ™äøŖęƒé™ę˜Æē»™ē®”ē†å‘˜ēš„ļ¼‰ console.log('\nšŸ“ ę›“ę–°ęƒé™é…ē½®...'); const allStudentRoles = await prisma.role.findMany({ where: { code: 'student' } }); for (const studentRole of allStudentRoles) { // čŽ·å– homework:read ꝃ限 const homeworkReadPerm = await prisma.permission.findFirst({ where: { tenantId: studentRole.tenantId, code: 'homework:read' } }); if (homeworkReadPerm) { await prisma.rolePermission.deleteMany({ where: { roleId: studentRole.id, permissionId: homeworkReadPerm.id } }); console.log(` āœ… ē§»é™¤å­¦ē”Ÿč§’č‰²(ID:${studentRole.id})ēš„ homework:read ꝃ限`); } } console.log('\nāœ… å­¦ē”Ÿä½œäøščœå•é…ē½®å®Œęˆļ¼'); } main() .catch(console.error) .finally(() => prisma.$disconnect());