116 lines
3.5 KiB
TypeScript
116 lines
3.5 KiB
TypeScript
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());
|