标签归档:SaaS

SaaS 已死?AI 当立?

在 AI 编程逛飙的年份,到当前的阶段,能感觉到速度在加快,形式也在不断的迭代,写代码这个事情也变得门槛很低。

X 上有人在讲「AI 让软件开发成本接近零,所以 SaaS 价值也接近零」

美股前段时间也因此大跌了一波,但当前这个价值为零的逻辑还是不成立的。

这里有一个概念混淆:构建软件的成本 vs 拥有软件的成本。AI 主要压低前者,后者还在,甚至在很多公司里变得更贵。

在各种自媒体、AI 编程培训或者博眼球的报道中,「一个下午做出 Linear 替代」「一个周末写完 Stripe 替代」这种话,我不觉得完全是吹牛。用 Claude Code 这类工具,把界面、CRUD、简单流程、甚至一些边角的自动化都拼出来,确实快。

但在做出来的那一刻,资产没增加多少,负债突然多了。尤其是碰钱、碰身份、碰合规、碰客户数据的时候。

以做了一个 Stripe 为例,我把 Vibe Coding 一个周末后,「现在拥有了什么」用更工程的语言翻译一下:

  • 拥有了 规则持续变化 的税务与开票适配:欧盟 VAT、各国电子发票、免税/退税、税率变更、发票作废红冲。
  • 拥有了 审计与认证的对话成本:PCI DSS、SOC 2、ISO 27001、渗透测试报告、供应商安全评估问卷。企业客户要的往往不是「你写得对不对」,是「谁在对这件事负责」。
  • 拥有了 支付与账务的边界条件:拒付、部分退款、重复扣款、汇率、四舍五入、账期、对账差异、资金在途、延迟入账。
  • 拥有了 全球化的坑:货币重估、货币小数位变化、地区性监管、某个国家突然要求强制 3DS、某个渠道突然不支持某种卡组织。
  • 拥有了 数据与权限的事故半径:某个字段脱敏没做好、某个导出接口忘了做权限校验、某个后台操作没有审计日志。
  • 拥有了 7×24 的值班现实:系统降级策略、容量、限流、重试风暴、第三方故障兜底、SLA 与赔付条款。

这些事大概率不是「可能发生」。按行业经验只是早晚问题。自从拥有系统开始,就等于自己签了那张无限期维护合同。

回想一个问题,SaaS 是什么?软件即服务,核心是服务,根本就没有提代码。

很多团队在内部系统上很执着,原因很直接:控制感强、改需求快、看起来省钱。上线半年以后,气氛通常变得不太好:需求排队、线上出过几次事故、业务抱怨响应慢、研发觉得自己在打杂。

这时候再看 SaaS,价值就很清晰了:SaaS 的核心商品是「运营表面积」的转移

代码只是其中一层,除了代码还有:

  • 基础设施与部署:多区域、容灾、备份恢复演练、变更管理。
  • 安全:漏洞扫描、依赖升级、密钥轮换、权限最小化、WAF、DDoS。
  • 合规:隐私条款、数据驻留、审计证据、流程制度落地。
  • 可靠性:监控告警、事故复盘、容量规划、灰度发布、回滚策略。
  • 支持与客户成功:工单、排障、培训、文档、FAQ、升级沟通。

当我们把软件「买回来」自己跑,这些都要自己补齐。很多公司低估的就是这一块。这也是为什么很多公司在 AI 赋能后,「运营表面积」的转移速度要慢于「代码」的转移速度。除非这些对公司不重要,如果这些都不重要, 这个系统可能也不重要了。

从 SaaS 的生命周期来看,AI 提升的是「0 到 1」,然而从成本的角度看,最贵的是「1 到 ∞」

这件事可以拆成两条曲线:

  • vibe coded 工具:初期成本很低,后期成本增长很快。越多人用、越多数据、越多流程依赖,它的「改动风险」和「维护面」指数上升。
  • 成熟 SaaS:初期采购成本看着不低,后期增长更接近线性。因为供应商把大量共性维护摊薄到所有客户身上。

AI 把 0→1 压得更便宜,直觉上会让人误判「买 SaaS 更不划算」。实际情况常常相反:AI 让 1→∞ 更贵了,因为我们会更频繁地改、更大胆地接更多业务进来,系统的负债增长速度被我们自己加速了。

这个成本不仅仅是 SaaS 软件的。

AI 让一个工程师单位时间产出更高,但单位工程小时的机会成本同步上升

至少当前的认知是这样的,可能到终极形态,完成不用人介入的时候,这个机会成本也会消失掉。

那是另一个话题了。

所以我对「AI 让 SaaS 价值归零」的判断是反的:AI 越强,成熟 SaaS 越值钱,前提是它真的把服务做扎实,真的帮我们把运营表面积吃掉。

SaaS 本质上还是一种服务。

如果 SaaS 只是「界面更好看的 CRUD」,那这样的 SaaS 确实会死掉一批。

这些 SaaS 太薄了。

在 AI 时代要想活得更好,SaaS 通常需要如下的一些特征:

  • 规则密度高,正确性要求高
  • 合规与安全负担重
  • 生态变化快,需要持续跟进
  • 故障代价高,客户不想背锅
  • 接口与集成复杂,长期维护吃人

Stripe、WorkOS、Cloudflare 这类产品的共同点很明显:它们难点不在「写出来」,难点在「长期把它跑对」。正确性要靠无数细碎决策堆出来,运营水位要常年拉满。

AI 始终会改写 SaaS,整体逻辑会有一些变化。这里的 AI 改写过程,肯定不是「加一个聊天框」「做一个总结」「做一个生成报表」。

我觉得至少有三个点在当前阶段能快速跟进:

  1. 意图驱动,SaaS 的用户最终都是想通过 SaaS 完成工作,以前靠 UI 引导的,现在可以让用户意图表达,然后把意图落为可审计的操作序列,不管是用 MCP,还是 SKILLS;
  2. 更关注结果,传统 SaaS 交付的是工具,客户负责把工具嵌进流程。AI 让厂商有机会把流程吃进去,直接交付结果,比如「自动完成对账」「自动完成入职」「自动完成工单分流」。关键点在「责任」
  3. 定制方式的迭代,企业客户永远会提定制。以前定制意味着项目制和人力黑洞;AI 让「生成」变得便宜,但不要把生成等同于可维护,可以允许客户用自然语言提出规则,系统把规则编译成可测试、可审计的约束,每次变更都能跑回归校验,出问题能定位到规则版本与变更人。

我们常听到对于自研和购买 SaaS 的一个判断逻辑是:「核心业务自研,非核心买 SaaS」。

这句话太粗,没有啥指导意义。

如下一个判断清单,可以做为决策的一些依据:

适合买 SaaS 的场景

  • 领域合规重:支付、税务、身份、隐私、审计
  • 失败代价高:一出错就上新闻、上法务、上客户群
  • 生态变化快:标准常变、监管常变、攻击手法常变
  • 需要对外背书:企业客户会问「谁负责」「有没有认证」「有没有 SLA」

这种场景自研的隐性成本巨大。AI 再强,也只是让我们更快地把「维护合同」签在自己身上。

适合自研的场景

  • 强差异化:流程就是你的竞争力,外部产品很难贴合
  • 业务规则变化快,且只对内部负责:错了能快速纠正,不会引发合规事故
  • 生命周期短:一个季度就会重构或下线的东西
  • 数据高度敏感,且已经有成熟的数据治理与安全团队

这里自研的价值很实在:迭代速度、贴合度、数据控制。

AI 时代的「自研陷阱」会更隐蔽

以前自研失败,多数死在「做不出来」。现在会死在「做出来以后一路堆债」。

AI 会在早期持续正反馈:

  • 功能做得快
  • Demo 好看
  • 业务觉得爽
  • 老板觉得省钱

债务也在同期累积:

  • 没有威胁建模
  • 没有权限与审计体系
  • 没有数据分级与脱敏
  • 没有灾备演练
  • 没有 SLA 与值班机制
  • 没有供应链安全策略(依赖库、镜像、密钥)

等到系统进入关键路径,会发现自己已经没有退路。再想补课,代价是「停业务」或者「带病重构」。

这也是我反复强调「拥有软件是负债」的原因。负债不会因为 AI 变聪明就消失,它只会增长得更快。

AI 把「做一个能用的软件」变成了常态,把「把软件长期跑对」推成了门槛。薄 SaaS 会被挤压,真正提供服务、背负责任、把运营表面积吃掉的 SaaS,会更值钱。

以上。

AI Agent不够聪明,但 SaaS 公司可能是解药

最近经常会和 AI Agent 聊天,使用 AI 编程,并且也会和正在用 AI Agent 的朋友聊天,发现大家 AI Agent 的期待值和实际体验之间,存在着相当大的落差。

换句话说,大家觉得 Agent 不怎么聪明。

1. AI Agent 到底哪里不聪明

可能是以下的方面:

  1. 业务理解能力差。很多 AI Agent 看起来能对答如流,但一涉及到具体业务场景就开始答非所问。先不说原因,原因后面再细讲。
  2. 执行能力有限。在大家的预期中 AI Agent 应该能自主规划和执行任务,但实际上大部分所谓的 AI Agent 还停留在”问一句答一句”的阶段。我们想像中的一句话需求,如”帮我分析这份财报并生成投资建议”,大部分 AI Agent 是搞不定的,类似于 Manus 这种勉强可以的,但其结论是否能参考也是存疑的。
  3. 可控性差。我们一方面希望 Agent 有自主能力,能像人一样灵活处理问题;另一方面又希望它的行为可预测、可控制。这本身就是个悖论。结果就是,要么 Agent 太死板,只能按预设流程走;要么太「聪明」,经常做出一些让人意外的操作。
  4. 定制成本高。这本来不是聪明的问题,但这是聪明的代价,每个企业的业务都有自己的特殊性,要让 Agent 真正理解并适应这些特殊性,需要大量的定制化工作。但问题是,很多企业并没有这个技术能力或者预算来做深度定制。

2. 为什么会出现这些问题

我觉得主要是三方面的原因:

  1. 过高的预期。过去一年,AI Agent 的概念被炒得太热了。各种厂商都在宣传 Agent 能够”完全替代人工”、”自主完成复杂任务”。但实际上,现在的技术水平离这个目标还有很大距离。有的老板,听了厂商的宣传后,真的以为买个 Agent 产品就能替代掉几个员工。结果上线后发现,不仅没法替代人,反而需要专人来”照顾”这个 Agent,教它怎么工作,纠正它的错误。
  2. 模糊的产品定位。现在市面上的 Agent 产品,很多都想做成”万能助手”。但越是想什么都做,越是什么都做不好。反而是那些专注于特定场景的 Agent,比如专门做客服的、专门做数据分析的,效果会好很多。
  3. 技术栈的割裂。做好一个 Agent,需要模型能力、工程能力、业务理解能力的深度结合。但往往懂模型的不懂业务,懂业务的不懂模型,懂工程的可能两个都不太懂。这种割裂导致做出来的产品总是差那么一些。

3. 当前谁最有优势?

答案是:SaaS 公司。

在 AI Agent 落地上,SaaS 公司有着天然的优势。

SaaS 公司最大的优势是接近客户和数据。他们天天跟客户打交道,知道客户的真实需求是什么,痛点在哪里,实际的业务流程是怎样的。更重要的是,他们手里有大量的业务数据和场景数据,这些数据对于训练和优化 Agent 来说是无价之宝。

举个例子,一家做 CRM 的 SaaS 公司,如果要做销售 Agent,它有几个天然优势:

第一,它知道销售的真实工作流程是什么样的。不是理论上的流程,而是实际操作中的流程,包括各种例外情况和潜规则。

第二,它有大量的销售数据。什么样的话术转化率高,什么时间打电话效果好,不同行业的客户有什么特点,这些数据都在它的系统里。

第三,它有现成的客户界面。不需要重新教育客户怎么使用 Agent,可以直接嵌入到现有的产品里。

第四,它有持续优化的能力。客户每天都在使用它的产品,产生新的数据,这些数据可以用来持续优化 Agent 的表现。

相比之下,纯做 AI 的公司,虽然模型能力很强,但在落地时往往会遇到各种水土不服的问题。

4. 垂直场景的突破

在个人粗浅的认知中,Agent 的突破口在于垂直场景,而不是通用场景。在于需要 Konw-How 的场景。

为什么?因为垂直场景有几个优势:

第一,需求明确,专注。不需要 Agent 什么都会,只需要它把一件事做好就行。

第二,数据充足。垂直场景往往有大量的历史数据可以用来训练和优化。

第三,容错率高。因为场景固定,出现意外情况的概率较低,即使出现了也比较容易处理。

第四,ROI 清晰。在垂直场景下,Agent 的价值很容易量化。

比如法律文书撰写、行业分析、代码生成这些场景,都是合适的 Agent 应用场景。这些场景有明确的输入输出,有清晰的质量标准,有大量的历史数据,非常适合 Agent 来处理。

5. 可预测与可掌控的矛盾

在 ToB 场景下,企业客户最怕的就是不确定性。如果一个 Agent 今天的回答和明天的回答不一样,或者在关键时刻做出了意料之外的决策,那对企业来说不可接受的。

但是,客户又希望 Agent 有自适应能力,能够灵活处理各种情况。

当前的解决方案基本上是两个极端:

  1. 完全用 Workflow 来定义 Agent 的行为。每一步做什么都规定得清清楚楚,Agent 只是一个执行者。这样做的好处是完全可控,坏处是太死板,失去了 Agent 的灵活性。
  2. 完全放开,让 Agent 自己去学习和适应。这样做的好处是灵活,能处理各种意外情况,坏处是不可控,你永远不知道它下一步会做什么。

比较理想的方案应该是两者的结合:在关键决策点上用 Workflow 来控制,在具体执行上给 Agent 一定的自主权。但这说起来容易,做起来很难。需要对业务有深入的理解,知道哪些地方需要控制,哪些地方可以放开。

6. 模型能力 vs 工程能力

要解决这些矛盾和问题需要模型和工程两方面的提升,并且现阶段工程能力可能比模型能力更重要。

为什么?

因为现在的大模型能力其实已经不错了,GPT-5、Claude、DeepSeek 这些模型的理解和生成能力都很强。真正的瓶颈在于如何把这些能力转化成实际的业务价值。

这就需要大量的工程工作:

  • 如何设计合理的 Prompt,让模型理解业务需求
  • 如何构建知识库,让模型能够获取必要的信息
  • 如何设计工作流,让模型的输出能够被系统消费
  • 如何做异常处理,保证系统的稳定性
  • 如何做监控和优化,持续提升系统表现

这些工作属于比较累和碎的活儿,不如训练模型那么「高大上」,但却是 Agent 能否落地的关键。

7. 安全问题

AI Agent 的安全问题不仅仅是数据泄露,更大的问题在于,Agent 可能会做出一些不当的决策或者操作。

比如,一个有权限访问企业数据库的 Agent,如果被恶意引导,可能会删除重要数据或者泄露敏感信息。一个负责采购的 Agent,如果判断失误,可能会下错订单,造成巨大损失。如此种种……

现在的解决方案主要是加各种限制和审核机制,但这又回到了前面的矛盾:限制越多,Agent 就越不「智能」。

8. 可能的未来

基于目前的情况,我觉得接下来的一段时间 Agent 的发展会有几个趋势:

第一,从通用到垂直。越来越多的 Agent 会专注于特定的场景和行业。

第二,从替代到增强。Agent 的定位会从「替代人工」转变为「增强人工」。

第三,从单点到系统。不再是一个个孤立的 Agent,而是多个 Agent 协同工作的系统。

第四,从产品到服务。Agent 不再是一个买来就用的产品,而是需要持续优化的服务。

这些趋势意味着什么?

意味着 Agent 市场会越来越理性,泡沫会逐渐消失,真正有价值的应用会脱颖而出。

9. 最后

回到标题:AI Agent不够聪明

确实不够聪明,至少没有我们期望的那么聪明。

但这不意味着 Agent 没有价值。就像早期的计算机,虽然功能有限,但在特定场景下已经能创造巨大价值。关键是找到合适的场景,用合适的方式,解决真实的问题。

AI Agent 的发展还处于早期阶段,现在下结论还为时过早。但有一点是确定的:那些能够深入理解客户需求,扎实做好工程实施,持续优化产品体验的公司,最终会在这个市场上站稳脚跟。

至于 AI Agent 什么时候能真正「聪明」起来?我觉得还需要时间。可能是一年,可能是三年,也可能是五年。但在这个过程中,我们需要做的不是等待,而是不断探索、试错、优化,一步步接近那个目标。

毕竟,罗马不是一下子建成的,AI Agent 也不是。

以上。

做了 10 年SaaS 产品后,我总结的权限设计避坑指南

做 SaaS 产品这么多年,我发现权限控制是个特别有意思的话题。说它简单吧,很多团队都做得奇奇怪怪;说它复杂吧,掌握了核心原理后其实也就那么回事。

如果你是产品经理、技术负责人,或者正在做 B 端产品的创业者,这篇文章可能会对你有一些帮助。今天咱们就聊聊 SaaS 产品里的权限控制,怎么设计、怎么实施、怎么避坑。

1 为什么权限控制这么重要

说个数据:2022 年 SaaS 安全报告显示,43% 的企业因为权限配置错误导致过数据泄露。而业内人士都知道,实际比例可能高达63%——很多公司出了事都选择悄悄处理,不对外声张(也能理解的)。

再看一下 2020 年,微盟删库事件,一个运维人员因为跟公司有矛盾,趁着自己还有生产环境的管理员权限,直接把核心数据库给删了。

300 万商家的店铺全部瘫痪,整整 7 天无法营业。正值疫情期间,很多商家本来就靠线上维持生计,这一下彻底断了收入来源。最后微盟赔偿了1.5亿,股价暴跌,品牌信誉更是一落千丈。

事后复盘发现问题出在哪?

  • 一个人就能删除生产数据库,没有任何审批流程
  • 删除操作没有双人复核机制
  • 权限过度集中,运维人员的权限大到离谱

以此作为警示:对 SaaS 行业来说,权限管理不是技术问题,是生死问题。

为什么说权限问题往往比较致命?

做了这么多年 ToB 产品,我发现权限问题有几个特点:

1. 爆发性强:不像性能问题是逐渐恶化,权限问题是突然爆发。今天还好好的,明天就可能因为一个配置错误,导致全部客户数据泄露。

2. 影响面广:一个权限漏洞,可能影响所有客户。特别是多租户架构,一个 bug 就能让所有租户的数据混在一起(如果在多租户逻辑中使用的是字段隔离,而且大部分 SaaS 产品是这样做的)。

3. 修复成本高:早期设计不好,后期改造就是噩梦。

4. 信任难恢复:客户把核心数据放在你的系统里,是基于信任。一旦出现权限问题,这种信任很难恢复。哪怕你后来改得再好,客户心里也会有阴影。

权限控制是基础,这就像盖房子,地基不牢,楼盖得越高越危险。

2 权限控制的核心概念

在深入讨论之前,咱们先把几个基本概念理清楚。

2.1 权限的本质是什么

说白了,权限就是回答一个问题:谁能对什么做什么操作?

  • 谁:用户、角色、部门
  • 什么:功能模块、数据对象、页面按钮
  • 操作:查看、创建、编辑、删除、审批

这三个要素组合起来,就构成了权限控制的基础。比如「财务主管可以查看所有部门的报销单」,这就是一条权限规则。

2.2 功能权限和数据权限

很多人容易把这俩混在一起,其实它们解决的是不同维度的问题。

功能权限控制的是「能不能用这个功能」。比如普通员工看不到薪资管理模块,这就是功能权限。实现起来相对简单,一般在前端控制菜单显示,后端做接口校验就行。

数据权限控制的是「能看到哪些数据」。同样是查看订单列表,销售 A 只能看自己的订单,销售主管能看整个团队的订单,老板能看全公司的订单。这就是数据权限,实现起来要复杂得多。

有一个典型案例:某 CRM 系统,销售经理发现自己看不到下属的客户数据,一查才发现只做了功能权限,忘了做数据权限。结果所有销售经理都只能看到自己作为销售时录入的客户,管理功能形同虚设。

2.3 权限的安全边界

做权限控制,安全永远是第一位的。我总结了几个容易踩坑的地方:

前端权限不可信:永远不要只在前端做权限判断,哪怕把按钮隐藏了,懂技术的人照样能通过开发者工具发请求。所有权限判断必须在后端再做一遍。

默认拒绝原则:权限设计应该是「没有明确允许的都是禁止的」,而不是「没有明确禁止的都是允许的」。这个原则能避免很多安全漏洞。

最小权限原则:给用户的权限应该刚好够用就行,不要为了方便给过多权限。特别是生产环境的管理员权限,能不给就不给,给了也要有审计日志。

3 三种主流权限模型

聊完基础概念,咱们来看看业界常用的几种权限模型。每种模型都有自己的适用场景,没有绝对的好坏。

3.1 ACL

ACL,访问控制列表,是最直观的权限模型,直接定义「用户-资源-权限」的对应关系。比如:

  • 张三可以编辑文档 A
  • 李四可以查看文件夹 B
  • 王五可以删除报表 C

优点是简单直接,实现容易。早期的文件系统、简单的内容管理系统多用这种模型。

缺点也很明显:用户一多就没法管理了。假设你有 1000 个用户,100 个资源,每个资源有 5 种操作权限,理论上你需要维护 50 万条权限记录。更要命的是,新员工入职你得一个个配置权限,员工离职你得一个个回收权限,运维成本极高。

所以 ACL 一般只适合用户量少、权限关系简单的场景。如果你的 SaaS 产品用户量大,还是趁早换其他模型。

3.2 RBAC

RBAC,基于角色的访问控制,是目前最主流的权限模型,核心思想是引入「角色」这个中间层。用户不直接拥有权限,而是通过角色来获得权限。

比如定义几个角色:

  • 销售员:可以查看和编辑自己的客户、订单
  • 销售主管:可以查看和编辑本部门所有客户、订单,可以查看销售报表
  • 财务人员:可以查看所有订单,可以开具发票,可以查看财务报表

新员工入职,只需要给他分配对应角色就行了。角色的权限变了,所有该角色的用户权限自动更新。

RBAC 还可以细分为四种类型,实际应用中按需选择:

RBAC0(基本模型):最简单的实现,用户-角色-权限三层结构。大部分中小型 SaaS 产品用这个就够了。

RBAC1(角色分层模型):角色可以继承。比如「销售主管」自动继承「销售员」的所有权限,再加上管理权限。这样可以减少重复配置。

RBAC2(角色限制模型):增加了约束条件。比如「角色互斥」(一个用户不能既是采购员又是审批员),「角色数量限制」(一个用户最多只能有 3 个角色)等。

RBAC3(统一模型):集成了 RBAC1 和 RBAC2 的所有特性,最完整但也最复杂。

我的建议是从 RBAC0 开始,随着业务发展再考虑升级。过度设计只会增加系统复杂度。

3.3 ABAC

ABAC,基于属性的访问控制,是相对较新的模型,通过属性组合来判断权限。这些属性可以来自:

  • 用户属性:部门、职级、工龄、地域
  • 资源属性:类型、创建者、敏感度、标签
  • 环境属性:时间、地点、设备类型

举个例子:”华东区的销售经理在工作时间可以查看本区域高价值客户的信息”。这条规则涉及了用户的地域属性、角色属性,资源的地域属性、价值属性,以及时间这个环境属性。

ABAC 的优势是灵活性极高,可以实现非常精细的权限控制。缺点是实现复杂,性能开销大,权限规则难以理解和调试。

一般来说,如果你的业务场景确实需要这么复杂的权限控制(比如医疗、金融等强监管行业),可以考虑 ABAC。否则 RBAC 就足够了。

4 SaaS 产品的特殊挑战

相比传统的企业内部系统,SaaS 产品在权限控制上面临一些独特的挑战。

4.1 多租户隔离

这是 SaaS 最核心的需求。同一套系统里住着几百上千家企业,必须保证数据完全隔离。A 公司的员工绝对不能看到 B 公司的任何数据。

常见的隔离方案有三种:

独立数据库:每个租户一个数据库。隔离性最好,但成本高,难以维护。适合大客户少量部署的场景。

共享数据库、独立 Schema:每个租户一个 Schema。隔离性不错,成本适中。适合中等规模的 SaaS 产品。

共享数据库、共享表:所有租户的数据都在同一张表里,通过 tenant_id 字段区分。成本最低,但要特别小心 SQL 注入和权限泄露。这是大部分 SaaS 产品的选择。

如果采用第三种方案,一定要在所有 SQL 查询中强制加上 tenant_id 条件。我见过的好做法是在 ORM 层面做全局过滤器,或者在数据库层面用行级安全策略(Row Level Security)。

4.2 组织架构的映射

企业客户通常都有复杂的组织架构,我们的权限系统必须能够映射这种结构。常见的需求包括:

  • 树形部门结构,支持多层级
  • 一个人可能属于多个部门(兼职、虚拟团队)
  • 临时授权(代理、请假)
  • 按项目组、按地域等多维度的权限控制
  • 集团,公公司等逻辑

我的经验是,组织架构不要做得太复杂,够用就行。很多企业其实就是简单的部门层级 + 角色,硬要上矩阵式组织、事业部制这些复杂结构,反而增加了使用成本。

4.3 权限的动态性

SaaS 产品的权限需求经常变化:

  • 新功能上线,需要新的权限点
  • 客户要求定制化的权限规则
  • 不同行业、不同规模的客户,权限需求差异很大

所以权限系统必须设计得足够灵活。我推荐的做法是:

权限点动态化:不要把权限点写死在代码里,而是存在数据库里,通过配置来管理。

规则引擎:对于复杂的权限判断逻辑,可以引入规则引擎,让权限规则可以通过配置来调整。

权限模板:为不同类型的客户准备权限模板,新客户注册时可以快速初始化。

4.4 性能优化

权限判断是高频操作,一个页面可能要判断几十上百个权限点。如果每次都查数据库,性能肯定扛不住。

常用的优化手段:

缓存:用户登录时把权限信息缓存到 Redis,设置合理的过期时间。权限变更时主动刷新缓存。

权限位图:把权限用位图来表示,一个 long 型变量可以表示 64 个权限点,判断权限只需要位运算。

懒加载:不要一次性加载所有权限,而是按需加载。比如用户进入某个模块才加载该模块的权限。

预计算:对于数据权限,可以预先计算好用户能访问的数据 ID 列表,查询时直接用 IN 条件。

5 设计一个权限系统

说了这么多理论,咱们来点实际的。假设你要为一个 SaaS CRM 系统设计权限控制,应该怎么做?

5.1 需求分析

首先要搞清楚业务需求:

  • 系统有哪些功能模块?客户管理、订单管理、报表分析等
  • 有哪些角色?销售员、销售主管、客服、财务、管理员等
  • 数据权限如何划分?按部门、按区域、按客户等级等
  • 有哪些特殊需求?审批流程、临时授权、数据导出限制等

5.2 模型选择

对于 CRM 这种相对标准的业务系统,RBAC 是首选。具体用 RBAC0 还是 RBAC1,看企业规模:

  • 中小企业:RBAC0 足够,角色数量有限,权限关系简单
  • 大型企业:考虑 RBAC1,利用角色继承减少配置工作

5.3 数据库设计

核心表结构:

-- 用户表
CREATETABLEusers (
    idBIGINT PRIMARY KEY,
    tenant_id BIGINTNOTNULL,
    username VARCHAR(50NOTNULL,
    -- 其他字段...
    INDEX idx_tenant (tenant_id)
);

-- 角色表
CREATETABLEroles (
    idBIGINT PRIMARY KEY,
    tenant_id BIGINTNOTNULL,
    role_name VARCHAR(50NOTNULL,
    parent_id BIGINT-- 用于角色继承
    -- 其他字段...
    INDEX idx_tenant (tenant_id)
);

-- 权限表
CREATETABLE permissions (
    idBIGINT PRIMARY KEY,
    permission_code VARCHAR(100NOTNULL-- 如 'customer.view'
    permission_name VARCHAR(100NOTNULL,
    moduleVARCHAR(50), -- 所属模块
    -- 其他字段...
    UNIQUEKEY uk_code (permission_code)
);

-- 用户-角色关联表
CREATETABLE user_roles (
    user_id BIGINTNOTNULL,
    role_id BIGINTNOTNULL,
    PRIMARY KEY (user_id, role_id)
);

-- 角色-权限关联表
CREATETABLE role_permissions (
    role_id BIGINTNOTNULL,
    permission_id BIGINTNOTNULL,
    PRIMARY KEY (role_id, permission_id)
);

-- 数据权限规则表
CREATETABLE data_permissions (
    idBIGINT PRIMARY KEY,
    role_id BIGINTNOTNULL,
    resource_type VARCHAR(50), -- 如 'customer', 'order'
    rule_type VARCHAR(50), -- 如 'self', 'department', 'all'
    rule_value TEXT-- 具体规则,可以是 JSON
    INDEX idx_role (role_id)
);

6 避坑指南

做了这么多项目,我总结了一些常见的坑,希望你能避开:

6.1 过度设计

最常见的错误就是一上来就想做一个「完美」的权限系统。支持 ABAC、支持动态规则、支持工作流集成… 结果做了半年还没上线,业务等不及了。

记住,权限系统是为业务服务的,不是为了秀技术。先满足基本需求,再逐步迭代。

6.2 忽视性能

另一个常见问题是只关注功能,不关注性能。权限判断是高频操作,如果每次都要查十几张表,系统很快就会崩溃。

一定要做好缓存,关键接口要做压测。我的经验是,权限判断的响应时间应该控制在 10ms 以内。

6.3 权限配置过于复杂

有些系统的权限配置界面,复杂得连开发人员都搞不清楚。这样的系统,客户是不会用的。

权限配置要尽量简化,提供合理的默认值和模板。最好能提供权限检查工具,让管理员可以模拟某个用户的权限,看看到底能访问哪些功能和数据。

6.4 缺少审计日志

权限系统必须有完善的审计日志,记录谁在什么时候做了什么操作。特别是权限的授予和回收,必须有据可查。

这不仅是安全需要,很多行业还有合规要求。审计日志最好是独立存储,防止被篡改。

6.5 数据权限的 N+1 问题

实现数据权限时,很容易出现 N+1 查询问题。比如查询订单列表,每个订单都要判断一次是否有权限查看,结果一个列表页产生了上百次数据库查询。

解决方案是在列表查询时就加入权限过滤条件,而不是查出来再过滤。这需要在 SQL 层面就考虑权限问题。

7 其它一些变化

权限控制这个领域,这几年也有一些新的发展趋势:

7.1 Zero Trust 模型

Zero Trust 模型就是我们常说的零信任模型。

传统的权限模型是「城堡式」的:进了城门(登录系统)就基本畅通无阻。Zero Trust 模型要求每次访问都要验证权限,不管你是内部用户还是外部用户。

这对 SaaS 产品来说特别重要,因为用户可能从任何地方、任何设备访问系统。

7.2 AI 辅助的权限管理

利用机器学习来优化权限配置,比如:

  • 根据用户行为自动推荐合适的角色
  • 检测异常的权限使用,可能是账号被盗用
  • 自动发现权限配置中的冲突和冗余

7.3 细粒度的数据权限

不仅控制能不能看某条数据,还要控制能看到数据的哪些字段。比如普通销售能看到客户的基本信息,但看不到信用额度;财务能看到信用额度,但看不到跟进记录。

这需要在字段级别做权限控制,实现起来更复杂,但确实是一些行业的刚需。

8 写在最后

权限控制是 SaaS 产品的基础设施,做好了用户感知不到,做不好用户骂声一片。它不是一个能带来直接收益的功能,但却是产品能否长期发展的关键。

我的建议是:

  1. 不要等到出问题才重视权限,一开始就要规划好
  2. 选择适合自己业务的权限模型,不要过度设计
  3. 功能权限和数据权限要分开考虑,都很重要
  4. 做好性能优化和安全防护,这是基本要求
  5. 保持系统的灵活性,因为需求一定会变

技术是为业务服务的。不要为了炫技而把简单问题复杂化,也不要为了省事而在安全问题上偷懒。在这两者之间找到平衡,才是一个成熟的技术方案。

以上。