chore(qa): 验收台账与证据入库 + 构建/部署配置同步
- docs/acceptance/qa-tracker.md:跨周期缺陷单一真源台账(§7=第五轮)。 - 周期 1/2 + iPhone SE/axe 验收证据目录、ACCEPTANCE_REVIEW 快照入库。 - 同步 README/CONTEXT/CLAUDE/DESIGN/testing/deployment/lessons-learned 口径; next.config/Dockerfile/nginx/Jenkinsfile/docker-compose/sentry/prisma 对齐 standalone 产物装配与部署形态。
This commit is contained in:
+28
-3
@@ -220,14 +220,18 @@ async function main() {
|
||||
});
|
||||
}
|
||||
|
||||
// 必须与真实 ContentModel 的 code 全等(hasPermission 按 modelCode 全等匹配,
|
||||
// src/lib/permissions.ts:26)。防漂移门禁见 src/lib/seed-permissions.test.ts。
|
||||
// 'media' 是媒体库权限码(src/app/api/admin/media/route.ts:18),无对应 ContentModel 行。
|
||||
const contentModels = [
|
||||
'news',
|
||||
'product',
|
||||
'solution',
|
||||
'service',
|
||||
'case-study',
|
||||
'team',
|
||||
'legal',
|
||||
'team-page',
|
||||
'contact-page',
|
||||
'legal-page',
|
||||
'about-page',
|
||||
'hero-banner',
|
||||
'stat-item',
|
||||
@@ -237,6 +241,15 @@ async function main() {
|
||||
'page-copy',
|
||||
];
|
||||
|
||||
// site-config / navigation 属站点级配置,刻意仅 super_admin 可维护(hasPermission 的
|
||||
// super_admin 全权短路,src/lib/permissions.ts:24),不进上表。
|
||||
|
||||
// 外壳权限码 content-model / content-zone 同样无 ContentModel 行,仅作门控
|
||||
// (src/app/api/admin/models/route.ts:9、stats/route.ts:11、zones/route.ts:14,38,108)。
|
||||
// 决策:所有非 super_admin 角色仅补 read —— 仪表盘 getStats 与编辑器加载依赖
|
||||
// models/zones 的读取;zone 的 update/delete 属页面结构调整,刻意保持 super_admin 独有。
|
||||
const shellReadModels = ['content-model', 'content-zone'];
|
||||
|
||||
// 为 super_admin 之外的角色创建权限
|
||||
const permissionMatrix: Array<{ roleCode: string; actions: string[]; models?: string[] }> = [
|
||||
{
|
||||
@@ -259,6 +272,11 @@ async function main() {
|
||||
actions: ['read'],
|
||||
models: contentModels,
|
||||
},
|
||||
...['content_admin', 'content_editor', 'reviewer', 'readonly'].map((roleCode) => ({
|
||||
roleCode,
|
||||
actions: ['read'],
|
||||
models: shellReadModels,
|
||||
})),
|
||||
];
|
||||
|
||||
for (const { roleCode, actions, models } of permissionMatrix) {
|
||||
@@ -376,6 +394,13 @@ async function main() {
|
||||
{ name: 'value', type: 'text', label: '数值' },
|
||||
{ name: 'label', type: 'text', label: '标签' },
|
||||
{ name: 'sub', type: 'text', label: '副文本' },
|
||||
{ name: 'basis', type: 'select', label: '数据口径',
|
||||
description: '留空按「目标口径」处理并自动标注;仅在有可核验实测出处时选「已验证」',
|
||||
options: [
|
||||
{ label: '目标口径(设计/承诺值,非既成结果)', value: 'target' },
|
||||
{ label: '团队历史项目成果(非本公司交付数据)', value: 'team-history' },
|
||||
{ label: '已验证(有可核验实测出处)', value: 'verified' },
|
||||
]},
|
||||
]},
|
||||
{ name: 'certifications', type: 'array', label: '资质认证', fields: [
|
||||
{ name: 'name', type: 'text', label: '名称' },
|
||||
@@ -958,7 +983,7 @@ async function main() {
|
||||
],
|
||||
founderQuoteEyebrow: '创始团队观点',
|
||||
founderQuoteText: '我们相信,数字化不是一次性项目,\n而是持续迭代的能力建设。\n每一份投入,都应当经得起衡量。',
|
||||
founderQuoteName: 'Novalon 创始团队',
|
||||
founderQuoteName: '睿新致远创始团队',
|
||||
founderQuoteRole: '技术咨询 · 数字化转型同行者',
|
||||
newsEyebrow: '新闻动态',
|
||||
newsTitle: '公司要闻\n与研发动态',
|
||||
|
||||
Reference in New Issue
Block a user