功能权益Entitlement

你可能会说

用户买了高级版会员,代码里该怎么判断他能不能用这个导出功能?

根据用户的付费方案或订阅状态,决定当前账号可以使用哪些功能或配额例如免费版每月只能生成 3 次,专业版可无限导出高清图。计费系统负责扣款,功能权益负责把付费状态换算为具体的功能开关与配额。判断必须在服务端校验,不能只在前端把升级弹窗藏起来。
也常被叫作Entitlements订阅权益功能解锁付费权限Feature Entitlement
当前方案Free 免费版
基础绘图 (3 次/月)已启用
导出高清无水印文件需升级 Pro
团队共享协作空间需 Enterprise
专属优先生成通道未解锁
容易混淆?这样区分
功能权益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 人邀请新人需增购席位
防止未付费团队无限制添加项目成员
延伸阅读 · 权威出处