import { PrismaClient } from "@prisma/client"; import { PrismaMariaDb } from "@prisma/adapter-mariadb"; import "dotenv/config"; const base = process.env.DATABASE_URL || "mysql://localhost:3306/zhuiguang_ai?charset=utf8mb4"; const sep = base.includes("?") ? "&" : "?"; const connectionString = `${base}${sep}connection_limit=20&pool_timeout=30`; const adapter = new PrismaMariaDb(connectionString); const prisma = new PrismaClient({ adapter }); const PERMISSIONS = [ { groupName: "工具管理", name: "查看待审核工具", key: "tools.pending.view", sortOrder: 1 }, { groupName: "工具管理", name: "通过工具", key: "tools.pending.approve", sortOrder: 2 }, { groupName: "工具管理", name: "拒绝工具", key: "tools.pending.reject", sortOrder: 3 }, { groupName: "工具管理", name: "批量操作工具", key: "tools.pending.batch", sortOrder: 4 }, { groupName: "工具管理", name: "编辑待审核工具", key: "tools.pending.edit", sortOrder: 5 }, { groupName: "工具管理", name: "抓取工具Logo", key: "tools.pending.logo", sortOrder: 6 }, { groupName: "工具管理", name: "查看已发布工具", key: "tools.published.view", sortOrder: 7 }, { groupName: "工具管理", name: "新增工具", key: "tools.published.create", sortOrder: 8 }, { groupName: "工具管理", name: "编辑已发布工具", key: "tools.published.edit", sortOrder: 9 }, { groupName: "工具管理", name: "删除工具", key: "tools.published.delete", sortOrder: 10 }, { groupName: "工具管理", name: "查看工具分类", key: "tools.categories.view", sortOrder: 11 }, { groupName: "工具管理", name: "新增工具分类", key: "tools.categories.create", sortOrder: 12 }, { groupName: "工具管理", name: "编辑工具分类", key: "tools.categories.edit", sortOrder: 13 }, { groupName: "工具管理", name: "删除工具分类", key: "tools.categories.delete", sortOrder: 14 }, { groupName: "技能库", name: "查看待审核技能", key: "skills.pending.view", sortOrder: 15 }, { groupName: "技能库", name: "通过技能", key: "skills.pending.approve", sortOrder: 16 }, { groupName: "技能库", name: "拒绝技能", key: "skills.pending.reject", sortOrder: 17 }, { groupName: "技能库", name: "批量操作技能", key: "skills.pending.batch", sortOrder: 18 }, { groupName: "技能库", name: "编辑待审核技能", key: "skills.pending.edit", sortOrder: 19 }, { groupName: "技能库", name: "查看已发布技能", key: "skills.published.view", sortOrder: 20 }, { groupName: "技能库", name: "编辑已发布技能", key: "skills.published.edit", sortOrder: 21 }, { groupName: "技能库", name: "删除技能", key: "skills.published.delete", sortOrder: 22 }, { groupName: "技能库", name: "查看技能分类", key: "skills.categories.view", sortOrder: 23 }, { groupName: "技能库", name: "新增技能分类", key: "skills.categories.create", sortOrder: 24 }, { groupName: "技能库", name: "编辑技能分类", key: "skills.categories.edit", sortOrder: 25 }, { groupName: "技能库", name: "删除技能分类", key: "skills.categories.delete", sortOrder: 26 }, { groupName: "评测管理", name: "查看评测列表", key: "reviews.view", sortOrder: 27 }, { groupName: "评测管理", name: "查看评测详情", key: "reviews.detail", sortOrder: 28 }, { groupName: "评测管理", name: "发布评测", key: "reviews.publish", sortOrder: 29 }, { groupName: "评测管理", name: "驳回评测", key: "reviews.reject", sortOrder: 30 }, { groupName: "评测管理", name: "编辑评分", key: "reviews.edit_score", sortOrder: 31 }, { groupName: "评测管理", name: "请求重评", key: "reviews.regenerate", sortOrder: 32 }, { groupName: "评测管理", name: "删除评测", key: "reviews.delete", sortOrder: 33 }, { groupName: "评测管理", name: "生成内容(长文/脚本/卡片)", key: "reviews.generate_content", sortOrder: 34 }, { groupName: "AI发现", name: "工具导入", key: "discover.tools.import", sortOrder: 35 }, { groupName: "AI发现", name: "工具Logo抓取", key: "discover.tools.logo", sortOrder: 36 }, { groupName: "AI发现", name: "检测工具可访问性", key: "discover.tools.check", sortOrder: 37 }, { groupName: "AI发现", name: "删除失效工具", key: "discover.tools.check_delete", sortOrder: 38 }, { groupName: "AI发现", name: "自动发现技能", key: "discover.skills.auto", sortOrder: 39 }, { groupName: "AI发现", name: "手动导入技能", key: "discover.skills.import", sortOrder: 40 }, { groupName: "AI发现", name: "更新技能Stars", key: "discover.skills.update_stars", sortOrder: 41 }, { groupName: "内容管理", name: "查看日报列表", key: "content.daily.view", sortOrder: 42 }, { groupName: "内容管理", name: "新建日报", key: "content.daily.create", sortOrder: 43 }, { groupName: "内容管理", name: "编辑日报", key: "content.daily.edit", sortOrder: 44 }, { groupName: "内容管理", name: "删除日报", key: "content.daily.delete", sortOrder: 45 }, { groupName: "内容管理", name: "发布/取消发布日报", key: "content.daily.publish", sortOrder: 46 }, { groupName: "内容管理", name: "AI生成日报", key: "content.daily.ai_generate", sortOrder: 47 }, { groupName: "内容管理", name: "管理新闻条目", key: "content.daily.items_manage", sortOrder: 48 }, { groupName: "内容管理", name: "AI新闻发现导入", key: "content.news.import", sortOrder: 49 }, { groupName: "系统管理", name: "查看系统配置", key: "system.config.view", sortOrder: 50 }, { groupName: "系统管理", name: "编辑系统配置", key: "system.config.edit", sortOrder: 51 }, { groupName: "系统管理", name: "查看角色权限", key: "system.roles.view", sortOrder: 52 }, { groupName: "系统管理", name: "编辑角色权限", key: "system.roles.edit", sortOrder: 53 }, ]; const VIP_ALLOWED = [ "tools.pending.view", "tools.published.view", "tools.categories.view", "skills.pending.view", "skills.published.view", "skills.categories.view", "reviews.view", "reviews.detail", "discover.tools.import", "discover.tools.logo", "discover.tools.check", "discover.skills.import", "content.daily.view", "content.daily.create", "content.daily.edit", "content.daily.ai_generate", "content.daily.items_manage", "content.news.import", "system.config.view", ]; async function main() { console.log("🔐 权限系统种子数据初始化\n"); for (const perm of PERMISSIONS) { await prisma.permission.upsert({ where: { key: perm.key }, create: perm, update: { groupName: perm.groupName, name: perm.name, sortOrder: perm.sortOrder }, }); } console.log(`✅ ${PERMISSIONS.length} 个权限点已同步`); const allPerms = await prisma.permission.findMany({ select: { id: true, key: true } }); const allPermIds = allPerms.map((p) => p.id); let adminRole = await prisma.role.findUnique({ where: { slug: "admin" } }); if (!adminRole) { adminRole = await prisma.role.create({ data: { name: "超级管理员", slug: "admin", isSystem: true }, }); console.log("✅ 超级管理员角色已创建"); } else { await prisma.role.update({ where: { slug: "admin" }, data: { isSystem: true } }); console.log("ℹ️ 超级管理员角色已存在"); } await prisma.rolePermission.deleteMany({ where: { roleId: adminRole.id } }); for (const permId of allPermIds) { await prisma.rolePermission.create({ data: { roleId: adminRole.id, permissionId: permId } }); } console.log(`✅ 超级管理员已分配全部 ${allPermIds.length} 个权限`); let vipRole = await prisma.role.findUnique({ where: { slug: "vip" } }); if (!vipRole) { vipRole = await prisma.role.create({ data: { name: "VIP成员", slug: "vip", isSystem: true }, }); console.log("✅ VIP角色已创建"); } else { console.log("ℹ️ VIP角色已存在"); } await prisma.rolePermission.deleteMany({ where: { roleId: vipRole.id } }); const vipPermIds = allPerms.filter((p) => VIP_ALLOWED.includes(p.key)).map((p) => p.id); for (const permId of vipPermIds) { await prisma.rolePermission.create({ data: { roleId: vipRole.id, permissionId: permId } }); } console.log(`✅ VIP角色已分配 ${vipPermIds.length} 个权限`); const adminUser = await prisma.user.findFirst({ where: { role: "admin" } }); if (adminUser) { await prisma.user.update({ where: { id: adminUser.id }, data: { roleId: adminRole.id }, }); console.log("✅ 现有管理员用户已关联到超级管理员角色"); } console.log("\n🏁 权限初始化完成"); } main() .catch((e) => { console.error("💥 种子失败:", e); process.exit(1); }) .finally(() => prisma.$disconnect());