HTML 表单仅负责呈现和提交“公开范围”选项,权限控制必须由后端实现;应使用 <select> 或 type="radio" 传递 standardized value(如 public/friends/private),禁止用中文作 value,且不可依赖前端过滤或隐藏敏感内容。

HTML里没有成就公开范围这种功能
HTML 本身不处理用户权限、隐私设置或数据可见性逻辑。所谓“全站/好友/私有”是业务逻辑,必须由后端控制,前端 HTML 只负责把用户的选择呈现出来、提交过去。
怎么用 HTML 表单传递「公开范围」选项
常见做法是用 <select> 或一组 <input type="radio"> 把三个选项渲染成可交互控件,再通过表单提交或 JS 发送给后端。
-
<select name="visibility">更适合下拉式选择,语义清晰,移动端兼容好 -
<input type="radio" name="visibility" value="public">更适合并排显示(如“全站”“好友”“私有”三按钮) - 必须给每个选项设置明确的
value,比如public、friends、private,后端靠这个判断权限 - 不要用中文字符串当
value,比如value="全站"—— 编码、传输、比对都容易出问题
为什么不能只靠 HTML 做权限控制
因为 HTML 是纯静态标记语言,用户可以随时用开发者工具改掉 value、删掉 disabled、甚至绕过表单直接发请求。所有“可见性”逻辑必须在服务端校验和执行。
- 前端选了
friends,后端收到后仍要查当前用户和目标用户的关注/好友关系 - 即使 HTML 里隐藏了“私有”选项,用户也能用 curl 或 Postman 提交
visibility=private - 数据库里存的不是“全站”文字,而是标准化字段(如整数
0/1/2或枚举"public"/"friends"/"private")
常见错误:把 visibility 当成前端样式开关
有人试图用 JS 根据选择动态 show/hide 成就内容,这既不安全也不合理——页面加载时本就不该渲染用户无权看的内容。
立即学习“前端免费学习笔记(深入)”;
- 不要写
if (visibility === 'private') { hideElement() }这类逻辑 - 更不该在 HTML 里一次性输出全部成就,再靠 JS 过滤显示——源码里就能看到私有数据
- 正确做法:后端根据用户身份 + 成就 visibility 字段,决定是否把这条成就塞进 HTML 模板里
- 如果要用 JS 渲染(如 SPA),也得让 API 返回过滤后的列表,而不是前端自己筛











