功能权益Entitlement
你可能会说
用户买了高级版会员,代码里该怎么判断他能不能用这个导出功能?
根据用户的付费方案或订阅状态,决定当前账号可以使用哪些功能或配额例如免费版每月只能生成 3 次,专业版可无限导出高清图。计费系统负责扣款,功能权益负责把付费状态换算为具体的功能开关与配额。判断必须在服务端校验,不能只在前端把升级弹窗藏起来。
也常被叫作Entitlements订阅权益功能解锁付费权限Feature Entitlement
容易混淆?这样区分
功能权益Entitlement≠权限控制 Authorization
权限控制 Authorization 依据组织角色(如管理员/成员)判断谁能执行操作;功能权益 Entitlement 依据付费契约与商业套餐(如 Free/Pro)判断账号解锁了哪些功能与配额。
功能权益Entitlement≠身份认证 Authentication
身份认证 Authentication 确认当前访问者的身份是谁;功能权益 Entitlement 确认当前身份购买的方案能使用什么。
什么时候用
- 在服务端接口中逐项校验功能权益,不轻信前端传来的 isPro 标记每次敏感操作都经过权限判断当前用户→权限规则→允许 / 拒绝
- 通过 Webhook 异步同步订阅变更,及时更新数据库中的权益状态管理操作留下记录16:42 · admin_u7disabled user_u23reason: repeated abuse
- 区分布尔开关(如高清导出)与用量配额(如每月 50 次 AI 对话)默认拒绝,按需开放默认DENY明确开放viewer → read
- 方案过期或退款时,确保服务端权益立刻收回并返回友好的升级提示角色之外,还要看资源关系当前用户u_23文章作者u_23结果允许编辑
什么时候不用
- 只在前端隐藏付费按钮:绕过界面的直接 API 请求仍可能调用成功隐藏按钮不等于接口安全页面没有删除按钮 → 直接请求DELETE /users/42 → 204
- 在客户端代码中硬编码管理员或付费用户的专属操作密钥前端声明的身份可以伪造POST /api/admin/delete{ "userId": "u_23", "role": "admin" }
- 每次请求都同步向支付平台发起网络查询:应使用本地数据库缓存权益同一规则散落多处users.ts检查 adminorders.ts忘了检查reports.ts规则不同
- 把团队角色混同于付费方案:管理员账号若未购买套餐同样没有高级权益登录不代表能看所有数据已登录→访问他人账单→应该 403
组成结构 · Anatomy
订阅方案换算为功能解锁与用量配额
用户向支付平台购买的商业方案,如 Free、Pro 或 Team
控制特定功能是否可用,例如能否导出高清视频、能否移除品牌水印
数量型上限约束,例如每月 5000 次 API 调用或 10 个项目上限
常见变体 · Variants
开关型功能Feature Gate
hasEntitlement("hd_export")
按功能是否解锁控制界面显示与接口放行
用量配额Usage Quota
usedCredits < maxCredits
按调用次数、存储容量或生成额度实施计量控制
席位控制Seat Limit
currentSeats <= planSeats
多人协作产品根据付费席位数限制成员添加
典型使用场景
免费版与专业版功能解锁
功能解锁按套餐判断高清导出
当前方案Free
→
高清导出需 Pro 权益
服务端在响应前校验 export_hd 权益记录
每月 AI 用量配额扣减
用量配额每次调用核减剩余额度
本月上限100 次已使用99 次状态剩余 1 次
配额耗尽后拦截请求并提示购买加油包
订阅到期权益自动失效
订阅变更Webhook 驱动权益生效
用户付款→Stripe Webhook→写入 Pro 权益
异步写入业务数据库,后续请求即刻生效
团队套餐按席位控制成员
席位控制团队套餐限制协作人数
已购席位5 人当前成员5 人邀请新人需增购席位
防止未付费团队无限制添加项目成员
延伸阅读 · 权威出处