权限控制
Authorization
中级通用权限控制(Authorization)是系统根据用户身份、资源和操作,判断一次请求能否被允许的机制。它解决的是“已经登录的人能做什么”的问题:比如团队成员可以查看项目,但只有项目管理员能删除项目。
你可能会说:「我做了一个团队项目后台,想让成员能看项目,但只有管理员能删,别人也不能改不属于自己的项目。」
读之前建议先了解
动手看看删除团队项目
1
普通成员已经登录,向应用服务发起删除项目的请求。登录证明他是谁,不代表他能删除项目。
要点权限控制要判断哪几件事?
- 1
先看谁在发起操作
用户登录后,我们才知道请求来自谁。但知道“你是谁”还不够:同一个人可能在甲团队是管理员,在乙团队只是成员,所以判断权限时还得看他当前属于哪个团队。
- 2
再看要操作什么资源
“可以编辑项目”不是一句足够完整的规则。我们还要问:编辑哪个项目?如果成员只能改自己团队的项目,后端就得核对项目归属,而不是只看用户有没有“成员”这个身份。
- 3
在执行操作前作出判断
隐藏删除按钮能减少误点,却拦不住直接调用接口的人。因为请求最终在后端执行,所以后端要在删除前检查权限;检查没通过,就不执行删除,并返回拒绝访问的结果。
容易混淆的地方
身份认证回答“你是谁”,权限控制回答“你能对这个资源做什么”:登录成功不等于能看所有人的数据。功能权益回答“这个账号买了哪些功能”,例如付费后能否使用导出;即使开通了导出,权限控制仍可能限制你只能导出自己团队的数据。
什么时候用
适合用
- 做团队协作后台时,成员能查看项目,管理员才能删除项目,还要限制成员只能操作自己团队的数据。
- 做文件分享功能时,文件所有者能编辑,收到分享的人只能查看,未获分享的人无法读取。
- 做 AI 工具时,Agent 准备调用删除文档的接口,需要确认当前用户是否有权删除目标文档。
不适合用
- 做无需登录的公开产品介绍页,所有访客看到相同内容时,不必设计用户权限;直接提供公开页面即可。
- 做完全离线、数据只留在本机的个人计算器,没有账号或共享资源时,不必引入权限角色;把输入和计算逻辑做好即可。
- 只是想让某个按钮分批对用户开放、观察新功能效果时,先用功能开关;这不是在判断用户能否操作受保护的资源。
练一练选一个答案,看看解释
你做了一个团队项目后台。普通成员登录后看不到“删除项目”按钮,但他手动向删除接口发送请求,竟然删掉了别的团队的项目。你会怎样修复?
让 AI 帮你做复制给 AI Agent 直接用
请为团队项目的查看、编辑和删除接口实现权限控制:根据已认证用户的团队关系、角色及目标项目归属判断请求是否允许;普通成员只能查看和编辑本团队项目,只有本团队管理员能删除。检查放在后端执行操作前,并补充允许与拒绝的测试用例。