# SaaS 权限管理：如何按方案控制功能访问

> SaaS 权限管理指南：了解权限是什么、如何将方案映射到功能访问、常见架构模式，以及如何让计费与访问权限保持同步。
- **Author**: Ayush Agarwal
- **Published**: 2026-07-10
- **Category**: Billing, SaaS
- **URL**: https://dodopayments.com/blogs/zh/entitlement-management-saas

---

权限管理是 SaaS 产品决定每位客户可以使用哪些内容的机制。它负责将客户购买的方案转化为具体的访问权限：哪些功能会解锁、可以获得多少个席位、可以发起多少次 API 调用，以及这些限制何时重置。做好权限管理，计费和产品功能就能始终保持一致；做不好，就可能免费提供产品，或向客户收取他们无法使用的功能费用。

大多数团队最初都会把权限硬编码成散落在代码库中的 `if plan == 'pro'` 判断。添加第二个方案、自定义企业交易、使用量限制或促销套餐后，这种方式就会失效。判断逻辑不断增加，与计费逐渐不同步，并成为难以追踪的隐性收入损失来源。

本文将介绍权限是什么、它如何将计费与功能访问连接起来、哪些架构模式能够规模化，以及随着方案不断增加，如何让权限与计费保持同步。本文面向正在构建 SaaS 产品访问层的创始人和工程师。

## 权限究竟是什么

权限是一条记录，表示某个客户可以执行某项特定操作，通常是因为该客户订阅了某个方案。它回答了这样一个问题："这个客户现在可以使用此功能吗？"

权限有几种常见形式。布尔权限只有开启或关闭两种状态：客户要么可以访问分析仪表盘，要么不可以。数量权限是一个数值：5 个团队席位、3 个项目、10,000 次 API 调用。计量权限则会记录使用量，并与会在计费周期重置的限制进行比较，这是[按使用量计费](https://dodopayments.com/billing/usage-based-billing)的基础。

关键在于：权限是数据，而不是代码。与其硬编码"专业版用户可以使用高级报告"，不如存储一条授予 advanced-reports 能力的权限记录，然后让产品在运行时读取这条权限。正是这种分离，让你无需重新部署就能调整方案，也让计费变化可以自动传递到访问权限。

## 为什么硬编码的方案判断会失效

最简单的做法是在产品代码中直接检查方案名称。它一开始看起来很整洁，但随着产品增长，会以可预见的方式失效。

当你在代码库中到处散落 `if plan == 'pro'` 时，每新增一个方案，就意味着要修改每一个判断。一个自定义企业交易可能只授予某项专业版功能，却不授予另一项功能，这种情况没有清晰的表达方式，于是你只能不断添加特殊处理。一个限时套餐如果让免费用户获得某项高级功能，又会迫使你增加另一个例外。久而久之，没人能不搜索代码就回答"Growth 方案到底包含什么"。

更糟的是，这些判断会逐渐偏离计费逻辑。销售完成了一笔包含自定义限制的交易，但代码只识别命名方案，于是客户可能获得过多权限，或者因为获得的权限过少而提交支持工单。每一次偏差，要么造成收入损失，要么增加支持负担。解决方法是：不要再用方案名称编码访问权限，而是改用由计费控制的权限来表达。

## 权限架构模式

可规模化的权限系统需要分离三个关注点：方案授予什么、客户拥有哪些权限，以及产品在运行时检查什么。

```mermaid
flowchart LR
    A[方案 / 订阅] -->|授予| B[权限]
    B -->|由其读取| C[产品访问检查]
    D[使用事件] -->|计入| B
    C -->|允许或拒绝| E[功能 / API 响应]
```

流程如下：客户订阅后，方案或订阅会授予一组权限。这些权限以数据形式存储，并关联到客户。每当产品需要控制某项功能的访问时，就向权限层询问"这个客户是否拥有 X 的权限"，而不是检查方案名称。对于计量权限，使用事件会从权限限制中扣减对应的计数。

这种模式意味着，添加方案只需修改数据，不需要修改代码。自定义企业交易只是一组自定义权限。套餐则是额外授予一项权限。产品代码无需发生变化，因为它只询问客户拥有哪些能力，从不关心客户订阅了哪个方案。

## 让权限与计费保持同步

权限管理最难的部分不是初始授予，而是在订阅发生变化时保持权限准确。升级、降级、取消、支付失败和方案迁移，都需要实时更新权限。

客户升级时，新权限通常应该立即生效，计费侧则经常会进行[按比例计费](https://dodopayments.com/blogs/subscription-upgrade-downgrade-proration)。客户降级时，被移除功能的访问权限应该在正确的时间撤销，通常是在已付费周期结束时，而不是立即撤销。支付失败导致订阅失效时，权限应该降级到免费层级，而不应全部消失，这样客户仍然可以恢复使用。

处理这一问题的简洁方式是采用事件驱动架构。每当订阅发生变化，计费系统就发出一个事件，权限层据此更新。这正是 [webhooks](https://docs.dodopayments.com/developer-resources/webhooks/intents/webhook-events-guide) 的用途：订阅更新事件会触发权限重新计算。当计费和权限以这种方式连接起来后，两者就不会发生偏差，因为每次计费变化都会自动传递到访问权限。

## 权限与按使用量计费

计量权限是权限管理与计费变得不可分割的地方。如果你按 API 调用次数、预付额度或消费单位收费，那么权限就是限制，使用量计数器则是计费依据。

这正是[预付费计费](https://dodopayments.com/billing/credit-based-billing)背后的模式：客户购买一定的预付额度余额，使用时逐步扣减。权限就是预付额度余额，使用事件负责扣减，而当余额不足时，计费系统会补充余额或收取超额费用。在我们分析 [OpenAI 计费模型](https://dodopayments.com/blogs/openai-billing-model)的文章中介绍的公司，正是以这种方式大规模运行：将预付额度作为权限，将令牌使用量作为计量指标。

要做好这一点，权限层和计量层必须共享状态。当客户达到限制时，产品必须立即知道应该阻止请求、限制速率，还是触发超额费用。这种实时连接，正是运转良好的用量型产品与会侵蚀自身利润的产品之间的区别。

## 自行构建还是使用平台

你可以自行构建权限管理系统。许多团队确实会这样做，而且对于单一的简单方案来说并不复杂。但随着方案目录和定价变得更加复杂，成本就会逐渐显现。

自研系统意味着你需要负责方案与权限之间的映射、每次订阅变化时的同步逻辑、计量计数器，以及实时访问检查。这些环节中的任何一个，都可能导致计费与访问权限出现偏差。随着你增加用量层级、企业交易和套餐，这些内容会形成一块需要持续维护的重要工程工作面。

包含权限功能的计费平台可以替你处理映射和同步。Dodo Payments 将[订阅](https://dodopayments.com/billing/subscriptions)、用量计量和权限连接起来，因此方案变化会自动更新客户可以访问的内容，用量也会计入正确的限制，无需你自行构建底层连接。[开发者集成指南](https://docs.dodopayments.com/developer-resources/integration-guide)介绍了如何在产品中读取权限，[agent skills](https://docs.dodopayments.com/developer-resources/agent-skills)则包含预付费计费和按使用量计费设置的模式。

## 常见问题

### SaaS 中的权限管理是什么？

权限管理是根据客户购买的方案，决定每位客户可以使用哪些内容的访问层。它将订阅转化为具体的访问权限：哪些功能会解锁、允许使用多少个席位或项目，以及适用哪些使用量限制。它负责让计费与产品访问保持一致。

### 为什么不直接在代码中检查方案名称？

像 `if plan == 'pro'` 这样的硬编码方案判断，在增加方案、自定义交易和套餐后就会失效，因为每种新情况都意味着要修改所有判断。它们还会逐渐偏离计费逻辑，因此销售售出的自定义限制可能与代码实际执行的限制不一致。将权限存储为数据可以同时避免这两个问题。

### 如何让权限与计费保持同步？

采用事件驱动的方式：计费系统在每次订阅变化时发出事件，权限层据此更新。订阅更新 webhook 会触发权限重新计算，因此升级、降级和订阅失效都会自动传递到访问权限，无需手动处理。

### 权限与按使用量计费有什么区别？

权限定义客户可以使用什么，而按使用量计费则根据客户实际消耗的内容收费。对于计量型产品，两者会合并：权限是限制，使用量计数器是计费依据。两者必须共享状态，这样产品才能立即知道客户何时达到限制。

### 应该自行构建权限管理，还是使用平台？

对于单一的简单方案，自行构建没有问题；但随着你增加用量层级、企业交易和套餐，维护成本会不断上升，因为每个环节都可能导致计费与访问权限出现偏差。包含权限功能的计费平台可以处理方案到访问权限的映射，并自动保持同步。

## 结语

权限管理是将付费方案转化为具体产品权限的访问层。将权限作为数据处理，而不是硬编码方案判断，可以让你在无需修改产品代码的情况下添加方案和自定义交易，并避免计费与访问权限逐渐脱节。

最难的两件事，是让权限与每次订阅变化保持同步，以及将计量权限连接到实时用量。你可以通过事件驱动设计解决这两个问题，也可以使用将订阅、用量和权限连接起来的计费平台，让同步自动完成。无论采用哪种方式，最终都能让客户始终获得与其付费内容相匹配的产品能力。
---
- [More Billing articles](https://dodopayments.com/blogs/category/billing)
- [All articles](https://dodopayments.com/blogs)