跳到正文

权限控制

Authorization

中级通用

权限控制(Authorization)是系统根据用户身份、资源和操作,判断一次请求能否被允许的机制。它解决的是“已经登录的人能做什么”的问题:比如团队成员可以查看项目,但只有项目管理员能删除项目。

你可能会说:「我做了一个团队项目后台,想让成员能看项目,但只有管理员能删,别人也不能改不属于自己的项目。」

读之前建议先了解

动手看看

删除请求权限校验用户普通成员应用服务权限判断项目
1

普通成员已经登录,向应用服务发起删除项目的请求。登录证明他是谁,不代表他能删除项目。

要点

  1. 1

    先看谁在发起操作

    用户登录后,我们才知道请求来自谁。但知道“你是谁”还不够:同一个人可能在甲团队是管理员,在乙团队只是成员,所以判断权限时还得看他当前属于哪个团队。

  2. 2

    再看要操作什么资源

    “可以编辑项目”不是一句足够完整的规则。我们还要问:编辑哪个项目?如果成员只能改自己团队的项目,后端就得核对项目归属,而不是只看用户有没有“成员”这个身份。

  3. 3

    在执行操作前作出判断

    隐藏删除按钮能减少误点,却拦不住直接调用接口的人。因为请求最终在后端执行,所以后端要在删除前检查权限;检查没通过,就不执行删除,并返回拒绝访问的结果。

容易混淆的地方

身份认证回答“你是谁”,权限控制回答“你能对这个资源做什么”:登录成功不等于能看所有人的数据。功能权益回答“这个账号买了哪些功能”,例如付费后能否使用导出;即使开通了导出,权限控制仍可能限制你只能导出自己团队的数据。

什么时候用

适合用

  • 做团队协作后台时,成员能查看项目,管理员才能删除项目,还要限制成员只能操作自己团队的数据。
  • 做文件分享功能时,文件所有者能编辑,收到分享的人只能查看,未获分享的人无法读取。
  • 做 AI 工具时,Agent 准备调用删除文档的接口,需要确认当前用户是否有权删除目标文档。

不适合用

  • 做无需登录的公开产品介绍页,所有访客看到相同内容时,不必设计用户权限;直接提供公开页面即可。
  • 做完全离线、数据只留在本机的个人计算器,没有账号或共享资源时,不必引入权限角色;把输入和计算逻辑做好即可。
  • 只是想让某个按钮分批对用户开放、观察新功能效果时,先用功能开关;这不是在判断用户能否操作受保护的资源。

练一练

你做了一个团队项目后台。普通成员登录后看不到“删除项目”按钮,但他手动向删除接口发送请求,竟然删掉了别的团队的项目。你会怎样修复?

让 AI 帮你做

请为团队项目的查看、编辑和删除接口实现权限控制:根据已认证用户的团队关系、角色及目标项目归属判断请求是否允许;普通成员只能查看和编辑本团队项目,只有本团队管理员能删除。检查放在后端执行操作前,并补充允许与拒绝的测试用例。

接下来学什么