v0.11.1: 权限体系重构 + AI管线优化 + 内容整理

This commit is contained in:
sgp
2026-05-22 18:36:41 +08:00
parent 7955d11c52
commit b33fe1e8e1
397 changed files with 30940 additions and 161 deletions
+146
View File
@@ -0,0 +1,146 @@
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());