VibeHubVibe Coding 术语图鉴
术语练习路线防止 AI 味儿Skill
⌕
Oil
›权限控制

权限控制Authorization

你可能会说

登录之后还要分谁能看谁不能看,管理员和普通用户不一样。

确认身份后,根据规则判断用户是否有权访问特定界面或执行某项操作·例如,普通用户只能修改自己的资料,管理员可管理成员。敏感操作必须在服务端逐次检查;隐藏按钮只改善界面,不能代替权限判断。
先知道
身份认证 Authentication数据库 Database
当前用户成员 · 小林
查看项目允许
编辑自己的任务允许
删除他人任务拒绝
管理全部账号拒绝

什么时候用

  • 每次读取或修改敏感资源,都在服务端检查当前用户
    每次敏感操作都经过权限判断
    当前用户→权限规则→允许 / 拒绝
  • 同时检查角色和资源归属:是不是本人、是不是项目成员
    角色之外,还要看资源关系
    当前用户u_23文章作者u_23结果允许编辑
  • 默认拒绝,只明确开放真正需要的能力
    默认拒绝,按需开放
    默认DENY明确开放viewer → read
  • 为管理操作保留审计记录:谁在什么时候改了什么
    管理操作留下记录
    16:42 · admin_u7disabled user_u23reason: repeated abuse

什么时候不用

  • 只把删除按钮隐藏:用户仍可以直接请求删除接口
    隐藏按钮不等于接口安全
    页面没有删除按钮 → 直接请求DELETE /users/42 → 204
  • 相信前端传来的 userId 或 role=admin
    前端声明的身份可以伪造
    POST /api/admin/delete{ "userId": "u_23", "role": "admin" }
  • 登录后默认允许访问所有数据:认证不等于授权
    登录不代表能看所有数据
    已登录→访问他人账单→应该 403
  • 权限规则散落在几十个文件里,改一处漏三处
    同一规则散落多处
    users.ts检查 adminorders.ts忘了检查reports.ts规则不同
组成结构 · Anatomy
谁能否做什么作用于哪个资源
当前已通过认证的用户,以及可信来源中的角色和成员关系
读取、编辑、删除、审批等需要逐项判断的能力
目标记录、项目或文件;还要检查它归谁所有、属于哪个组织
常见变体 · Variants
按角色Role-based
viewer · editor · admin
规则简单、角色边界清晰
按资源归属Ownership
post.userId === me.id
用户只能操作自己的数据
按成员关系Membership
project_members
团队与多人协作产品
典型使用场景
只能编辑自己的资料
个人资料按资源归属判断编辑权限
当前用户u_23资料所有者u_23结果允许编辑
项目成员可查看
项目成员成员关系决定查看权限
项目VibeHub用户角色viewer权限可查看 · 不可删除
管理员可以封禁账号
管理员操作封禁账号并留下审计记录
目标账号user_42原因重复滥用
确认封禁
记录 admin_u7 · 16:42 · disable user_42
付费用户访问高级功能
付费功能订阅状态由服务端确认
当前方案Free → 导出高清文件需要 Pro
隐藏入口之外,接口仍要检查订阅权限
延伸阅读 · 权威出处
权限控制安全清单OWASP ↗
oil
01oil 欧呦oiloil.org02GitHub@oil-oil03Xx.com/I_am_oil_oil04RED小红书oil 的小红书主页05Emailzhihuang.oiloil@gmail.com术语投稿提交建议
选择题选择一个你认为最合适的答案

已登录的普通成员请求删除另一个团队的项目。下一步该判断什么?

你可以这样告诉 AI Agent

“

删除项目接口只检查了用户是否登录。请增加项目归属或团队角色的服务端权限判断。先让同团队无删除权成员和其他团队成员分别请求同一个仍存在的测试项目,确认都被明确拒绝且项目未变化;最后再由项目所有者删除,并核对记录确实消失。

推荐工具
网页微调工具 · Selector Pro

快速选中页面元素,告诉 AI 要微调哪里

点选按钮、文字或卡片,写下“圆角小一点”,再把准确位置和页面信息一起复制给 AI。

打开 Selector Pro 官网↗
你的网页
按钮 · 开始探索圆角小一点
按钮 · 开始探索已复制给 AI