library-picturebook-activity/backend/scripts/finalize-student-config.ts
2026-01-09 18:14:35 +08:00

97 lines
2.8 KiB
TypeScript

import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
console.log('🔧 最终配置学生权限...\n');
// 获取学生角色
const studentRoles = await prisma.role.findMany({
where: { code: 'student' }
});
for (const studentRole of studentRoles) {
console.log(`\n处理学生角色 ID: ${studentRole.id}`);
// 学生最终需要的权限
const neededPerms = [
'workbench:read', // 工作台
'contest:activity:read', // 赛事活动
'homework:student:read', // 我的作业菜单
];
// 确保所有需要的权限都已分配
for (const permCode of neededPerms) {
const perm = await prisma.permission.findFirst({
where: { tenantId: studentRole.tenantId, code: permCode }
});
if (perm) {
const existing = await prisma.rolePermission.findFirst({
where: { roleId: studentRole.id, permissionId: perm.id }
});
if (!existing) {
await prisma.rolePermission.create({
data: { roleId: studentRole.id, permissionId: perm.id }
});
console.log(` ✅ 已添加: ${permCode}`);
} else {
console.log(` ⏭️ 已存在: ${permCode}`);
}
} else {
console.log(` ❌ 权限不存在: ${permCode}`);
}
}
// 移除不需要的权限
const permsToRemove = ['homework:read'];
for (const permCode of permsToRemove) {
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}`);
}
}
}
}
// 更新学生作业菜单
console.log('\n📝 更新学生作业菜单...');
const studentMenu = await prisma.menu.findFirst({
where: { path: '/student-homework' }
});
if (studentMenu) {
await prisma.menu.update({
where: { id: studentMenu.id },
data: {
permission: 'homework:student:read',
component: 'homework/StudentList',
}
});
console.log(' ✅ 菜单已更新');
}
// 显示最终权限
console.log('\n📋 学生角色最终权限:');
for (const studentRole of studentRoles) {
const perms = await prisma.rolePermission.findMany({
where: { roleId: studentRole.id },
include: { permission: true }
});
console.log(`\n 角色 ID ${studentRole.id}:`);
perms.forEach(p => console.log(` - ${p.permission.code}: ${p.permission.name}`));
}
console.log('\n✅ 配置完成!');
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());