Commit Graph
2 Commits
Author SHA1 Message Date
laoyang dcf510ef28 后台三处列表/详情:标题顶头独占一行,标签下移(与前台统一)
用户:「管理后台的待审核和全部问题那个列表里面也是一样的。
      标题应该顶头,然后在标题下面另起一行,写上来自于哪一个软件、
      它的状态是什么、它是什么分类。点到一个具体的反馈里面也是一样的,
      标题顶头,然后把同步日历、bug、待处理往下一行。管理后台也是全部按照这种方式去处理。」

改三处:
1. fb_admin_pending_row(待审核列表)
   prow-top(标签在前+标题)→ prow-head(标题独占一行)+ prow-tags(软件/分类/状态)
2. 全部问题列表
   item-top → item-head + item-tags
   🔴 同时补上软件名(fb_software_chip)—— 后台是跨软件视图,
      前台某个软件内部不需要显示软件名(满页同一个),后台必须显示。
3. 后台详情页头部
   item-top → item-head + item-tags,标题字号 19px 略大于列表

样式新增 .prow-head / .prow-tags(.prow-top 保留给操作日志,
日志条目只有「动作+编号」,单行反而合适)。

验证(真实渲染 + 浏览器测量,不登录后台、不动数据):
  待审核行  标题 top=87 left=222 / 标签 top=119 left=222 → 标签在下方、左对齐 0px 偏差
  全部问题  标题 top=318 left=223 / 标签 top=351 left=223 → 同上
  详情头    标题 top=541 left=228 / 标签 top=575 left=228 → 同上
  另外静态检查:三处的 head 段内均无状态标签,tags 段内均含软件/分类/状态。
  前台 5 个路由 200,未受影响。
2026-11-03 18:58:04 +08:00
laoyang 8763e8e17f 回复框去掉管理员口令与处理状态;带 token 时昵称/邮箱锁定为只读
用户三个问题,本质是同一件事:token 就是身份凭证,那就不该再让表单声明身份。

一、去掉管理员口令 / 处理状态
  用户:「回复这个地方,下面有个管理员口令,还有处理状态,都不要填了,
        只保留回复内容,加上人机验证就可以了」
  - 删掉表单里这两块,删掉 admin-pw/admin-status 的 CSS 与 bindAdminToggle 的 JS
  - 管理员身份只认后台登录态(fb_is_admin()),不再从公开表单收口令
  - 状态流转只在后台详情页那排按钮里做

二、带 token 时昵称/邮箱锁定为只读
  用户:「如果他带着 Token 进来之后邮箱又让他改了,我们又没办法知道谁是谁了」
  - 有 token = 已证明是提交人本人,表单不再让填昵称/邮箱,
    改为显示只读的「回复身份」块(原昵称 + 原邮箱)

三、服务端强制(关键)
  🔴 前端设成 hidden 是不够的 —— hidden 可以被改:
     谁拿到链接、改个 email 提交,这条反馈的联系人就变成他的了。
     所以服务端在 isOwnerView 时**直接丢弃 POST 里的 name/email**,
     一律以库里那条帖子的 author_name / author_email 为准。
     身份校验必须在服务端做。

验证(这次确保请求真的通过人机验证,不是被验证码挡住造成的假通过):
  题目「2 乘以 7」答 14 → 跳转到 #r3,回复确实入库;
  提交的是 黑客改名 / attacker@evil.example,
  实际入库 name=jervis email=zeussun@msn.com —— 伪造的两个字段都被丢弃。
  另外:无 token 的普通访客仍可自由填昵称邮箱;全站已无「管理员口令」残留。
  测试回复已清理,reply_count 已同步。
2026-11-03 10:02:57 +08:00