97 lines
2.8 KiB
TypeScript
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());
|