<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ACL on yuqiuwen</title><link>https://yuqiuwen.github.io/tags/acl/</link><description>Recent content in ACL on yuqiuwen</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sat, 08 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://yuqiuwen.github.io/tags/acl/index.xml" rel="self" type="application/rss+xml"/><item><title>权限模型设计</title><link>https://yuqiuwen.github.io/p/rbac/</link><pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate><guid>https://yuqiuwen.github.io/p/rbac/</guid><description>&lt;hr/&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="549px" data-flex-grow="229" height="1426" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://yuqiuwen.github.io/p/rbac/rbac.png" srcset="https://yuqiuwen.github.io/p/rbac/rbac_hu_dd9f15cf37c2a2ad.png 800w, https://yuqiuwen.github.io/p/rbac/rbac_hu_6737bef67738f746.png 1600w, https://yuqiuwen.github.io/p/rbac/rbac_hu_c0dfcdf77aac9a01.png 2400w, https://yuqiuwen.github.io/p/rbac/rbac.png 3266w" width="3266"&gt;&lt;/p&gt;&#10;&lt;p&gt;权限模型&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;RBAC（Role-Based Access Control）&#10;○ 按“角色→权限”授权，用户绑定角色，角色拥有权限。&#10;○ 例：财务角色可查看对账；运营角色可编辑商品。&lt;/li&gt;&#10;&lt;li&gt;ABAC（Attribute-Based Access Control）&#10;○ 按“属性表达式”授权：主体（用户）属性、资源属性、动作、环境（时间/地点/设备）等组成策略。&#10;○ 例：用户部门=资源部门 且 当前时间在工作时段 才能读。&lt;/li&gt;&#10;&lt;li&gt;ACL（Access Control List）&#10;○ 每个资源上维护“可访问主体列表及其权限”。&#10;○ 例：文档 A 允许 user_1 读写，允许 group_sales 只读。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="核心差异"&gt;&lt;a href="#%e6%a0%b8%e5%bf%83%e5%b7%ae%e5%bc%82" class="header-anchor"&gt;&lt;/a&gt;核心差异&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;维度&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;RBAC&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;ABAC&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;ACL&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;授权粒度&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;角色级（中等）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;条件级（最细，灵活）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;资源级（细，但分散）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;维护方式&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;维护角色和权限映射&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;维护策略表达式与属性字典&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;每个对象维护名单&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;动态场景&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;一般，需要建很多角色适配&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;强，天然支持时间/地点/级别等&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;一般，需逐对象改列表&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;可审计性&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;强，审计角色→权限清晰&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;中，需要记录策略判定依据&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;弱/中，分散在对象上&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;扩展到行/列级&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;需配合数据权限或 ABAC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;原生支持（属性即行/列条件）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;可做，但运维成本高&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;典型应用&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;企业后台、SaaS 多角色&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;安全/合规/多维条件场景&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;文件共享、按对象授权&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="优缺点对比"&gt;&lt;a href="#%e4%bc%98%e7%bc%ba%e7%82%b9%e5%af%b9%e6%af%94" class="header-anchor"&gt;&lt;/a&gt;优缺点对比&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;权限模型&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;适用场景&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;优点&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;缺点&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;RBAC&lt;/strong&gt;（基于角色的访问控制）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;角色稳定、权限边界清晰的后台系统；SaaS 的租户内角色管理&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;易理解、易审计、运维成本低；菜单与接口权限映射自然&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;面对细粒度、多条件权限需求时，容易出现&lt;strong&gt;角色爆炸&lt;/strong&gt;（成百上千个角色）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ABAC&lt;/strong&gt;（基于属性的访问控制）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;基于用户、资源、环境等多维条件进行权限判定；适用于租户、部门、属地等数据隔离，以及合规、零信任、行级/列级权限控制&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;灵活性高，单条策略可覆盖大量场景；天然支持动态上下文&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;策略设计与属性治理复杂；可解释性和排障难度较高；评估链路较长，通常需要缓存优化&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ACL&lt;/strong&gt;（访问控制列表）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;针对特定对象的临时分享与协作，如文档、文件、相册、项目权限&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;符合“分享给谁”的直觉；支持极细粒度的对象级权限控制&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;对象数量较多时管理复杂；权限审计与回收成本高；难以表达批量授权策略&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="如何选择"&gt;&lt;a href="#%e5%a6%82%e4%bd%95%e9%80%89%e6%8b%a9" class="header-anchor"&gt;&lt;/a&gt;如何选择&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;只需角色分权（管理员/运营/财务等），且权限不复杂 → 选 RBAC。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;需要数据级别的隔离或动态约束（部门/地域/级别/时间/设备） → 选 ABAC，或 RBAC + ABAC 组合。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;需要按单个对象分享给具体人（文档/仪表盘/工单） → 选 ACL，或在 RBAC/ABAC 之上对特定资源叠加 ACL。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;多租户 SaaS 常见组合：&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;租户边界/行级隔离：ABAC（tenant_id 必须相等等条件）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;租户内功能授权：RBAC（角色→权限）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;文档/报告临时共享：ACL&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="简单示例"&gt;&lt;a href="#%e7%ae%80%e5%8d%95%e7%a4%ba%e4%be%8b" class="header-anchor"&gt;&lt;/a&gt;简单示例&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;RBAC（权限点）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;权限命名：order:read、order:approve&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;角色映射：manager → [order:read, order:approve]&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;判断：user.roles 含 manager 且 action=order:approve → allow&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;ABAC（属性表达式）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;allow if user.dept == order.dept and user.level &amp;gt;= 3 and env.time in [09:00–18:00] and action == &amp;ldquo;read&amp;rdquo;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;ACL（对象名单）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;order/123: { allow: [user:alice:read, group:ops:read, user:bob:write] }&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="常见坑与规避"&gt;&lt;a href="#%e5%b8%b8%e8%a7%81%e5%9d%91%e4%b8%8e%e8%a7%84%e9%81%bf" class="header-anchor"&gt;&lt;/a&gt;常见坑与规避&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;RBAC 角色爆炸：用角色层级/权限聚合，别把数据维度塞进角色；把数据条件交给 ABAC。&lt;/li&gt;&#10;&lt;li&gt;ABAC 属性失真：属性字典不统一、来源不可信；先做属性治理（来源、口径、更新、授权）。&lt;/li&gt;&#10;&lt;li&gt;ACL 权限漂移：对象多且多人维护，定期做“可见性审计/分享过期回收”。&lt;/li&gt;&#10;&lt;li&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>