import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); async function main() { console.log('šŸ”§ ę›“ę–°å­¦ē”Ÿč§’č‰²ęƒé™...\n'); // čŽ·å–å­¦ē”Ÿč§’č‰² const studentRole = await prisma.role.findFirst({ where: { code: 'student' } }); if (!studentRole) { console.log('āŒ ęœŖę‰¾åˆ°å­¦ē”Ÿč§’č‰²'); return; } console.log(`ę‰¾åˆ°å­¦ē”Ÿč§’č‰²: ${studentRole.name} (ID: ${studentRole.id})`); // éœ€č¦ē§»é™¤ēš„ęƒé™ const permissionsToRemove = [ 'contest:read', // čµ›äŗ‹åˆ—č”Øęƒé™ 'contest:work:read', // ä½œå“ē®”ē†ęƒé™ 'contest:work:update', // ä½œå“ę›“ę–°ęƒé™ 'work:submit', // ęäŗ¤ä½œå“ęƒé™ 'homework:update', // ä½œäøšę›“ę–°ęƒé™ 'homework:delete', // ä½œäøšåˆ é™¤ęƒé™ ]; // éœ€č¦äæē•™/ę·»åŠ ēš„ęƒé™ const permissionsToKeep = [ 'workbench:read', // 巄作台 'contest:activity:read', // čµ›äŗ‹ę“»åŠØļ¼ˆę–°ęƒé™ļ¼‰ 'homework:read', // ęŸ„ēœ‹ä½œäøš ]; // ē§»é™¤äøéœ€č¦ēš„ęƒé™ console.log('\nšŸ“ ē§»é™¤äøéœ€č¦ēš„ęƒé™...'); for (const permCode of permissionsToRemove) { const perm = await prisma.permission.findFirst({ where: { tenantId: studentRole.tenantId, code: permCode } }); if (perm) { const deleted = await prisma.rolePermission.deleteMany({ where: { roleId: studentRole.id, permissionId: perm.id } }); if (deleted.count > 0) { console.log(` āœ… 已移除: ${permCode}`); } else { console.log(` ā­ļø ${permCode} ęœŖåˆ†é…ļ¼Œč·³čæ‡`); } } } // åˆ›å»ŗčµ›äŗ‹ę“»åŠØęƒé™ļ¼ˆå¦‚ęžœäøå­˜åœØļ¼‰ console.log('\nšŸ“ åˆ›å»ŗ/åˆ†é…čµ›äŗ‹ę“»åŠØęƒé™...'); let activityPerm = await prisma.permission.findFirst({ where: { tenantId: studentRole.tenantId, code: 'contest:activity:read' } }); if (!activityPerm) { activityPerm = await prisma.permission.create({ data: { tenantId: studentRole.tenantId, code: 'contest:activity:read', name: 'ęŸ„ēœ‹čµ›äŗ‹ę“»åŠØ', resource: 'contest:activity', action: 'read', description: 'å­¦ē”ŸęŸ„ēœ‹čµ›äŗ‹ę“»åŠØåˆ—č”Ø', } }); console.log(' āœ… åˆ›å»ŗęƒé™: contest:activity:read'); } // åˆ†é…čµ›äŗ‹ę“»åŠØęƒé™ē»™å­¦ē”Ÿ const existingActivityPerm = await prisma.rolePermission.findFirst({ where: { roleId: studentRole.id, permissionId: activityPerm.id } }); if (!existingActivityPerm) { await prisma.rolePermission.create({ data: { roleId: studentRole.id, permissionId: activityPerm.id } }); console.log(' āœ… å·²åˆ†é…ē»™å­¦ē”Ÿč§’č‰²: contest:activity:read'); } // ę›“ę–°čµ›äŗ‹ę“»åŠØčœå•ēš„ęƒé™ console.log('\nšŸ“ ę›“ę–°čœå•ęƒé™é…ē½®...'); const activityMenu = await prisma.menu.findFirst({ where: { name: 'čµ›äŗ‹ę“»åŠØ' } }); if (activityMenu) { await prisma.menu.update({ where: { id: activityMenu.id }, data: { permission: 'contest:activity:read' } }); console.log(' āœ… čµ›äŗ‹ę“»åŠØčœå•ęƒé™ę›“ę–°äøŗ: contest:activity:read'); } // ę˜¾ē¤ŗęœ€ē»ˆēš„å­¦ē”Ÿęƒé™ console.log('\nšŸ“‹ å­¦ē”Ÿč§’č‰²ęœ€ē»ˆęƒé™:'); const finalPerms = await prisma.rolePermission.findMany({ where: { roleId: studentRole.id }, include: { permission: true } }); finalPerms.forEach(rp => { console.log(` - ${rp.permission.code}: ${rp.permission.name}`); }); console.log('\nāœ… å­¦ē”Ÿęƒé™ę›“ę–°å®Œęˆļ¼'); } main() .catch(console.error) .finally(() => prisma.$disconnect());