📹 第十一章 GB/T 28181国标平台案例应用
📄 一句话概括

平台管理看着是「用户、角色、权限」,实际最难的是「数据范围」。 「能不能点播」脱离了「哪几路」就没有意义。 国内平台最常用的办法是「按编号前缀授权」——简单、和级联天然对齐。

📝 本节和前面几节的关系

上一节把设备接进来了,这一节讲「谁能看」。 权限设计错了,后面每一次加功能都要返工,因为「范围」这件事会渗透到每个接口里。

一、四种角色的实质差别

管理员看全部、能改;运维看全部、只读;值班只看本域、能点播和转云台; 访客只看指定几路。 四行的差别其实只有两个维度:「能看哪些设备」和「能做什么操作」。 前者是数据范围,后者是功能权限。 很多平台只做了后者,结果就是「所有人登录进去都看到一万路」,再用起来就乱了。 所以设计的第一步不是列操作,是定义「范围」怎么表达。

二、按编号前缀授权的妙处

国标编号前八位是中心编码,天然就是「域」。 所以「给用户挂一个前缀,凡是以它开头的设备都可见」这种做法,不用建表、不用维护关系、 和级联天然对齐。 这个做法在国内平台里非常普遍,因为它的实现成本几乎为零: 一条 SQL 的 like '34020000%' 就够了。 代价是「跨域共享」很难做:A 区的人要看 B 区的三路,前缀就表达不了。 这时才需要「设备组」这第二套模型。 所以成熟平台通常是「两套并存」:前缀管大范围,设备组管例外。

三、角色是为了「不用逐项勾」

算一下组合数就知道为什么需要角色:六种操作乘五种设备范围,就是三十种组合。 如果每个用户都逐项勾,管理员会疯。 四个角色模板把三十种组合压成四条规则, 这才是「角色」存在的理由——不是为了分类好看,是为了少勾。 但角色不能太细:角色一多,组合就回来了。 经验是「角色数不超过用户数的十分之一」,超过就说明设计跑偏了。 还有一个必须做的功能是「操作留痕」:谁在什么时候看了哪一路、转没转云台。 这不是合规要求,是「出了事能说清」的要求。 很多项目上线时不做,出事时补不上。

四、动手 Demo:权限不是「给不给」,是「能看哪几路」

列四种角色的范围和操作,再算「组合数 vs 角色数」这笔账。

acts, devs, roles = 6, 5, 4
print("组合数", acts * devs)
print("角色数", roles)
print("压缩比 %.1f 倍" % (acts * devs / float(roles)))

实跑输出:

--------------------------------------------------------------------
权限不是「给不给」,是「能看哪几路」
--------------------------------------------------------------------
**平台管理看着是「用户、角色、权限」三件事,实际最难的是「数据范围」。**
**因为「能不能点播」这个权限,脱离了「哪几路」就没有意义。**

  角色           设备范围         媒体权限           其他
  ---------------------------------------------------------------------
  **管理员**     **全部**         **全部**           **全部**
  **运维**       **全部**         **只读**           **看日志**
  **值班**       **本域**         **点播+云台**     **不能改配置**
  **访客**       **指定几路**     **只看**           **不能云台**

**四行里第三行最需要设计**:**「本域」这个范围怎么表达?**
**国标的编号里前八位就是中心编码,天然可以当「域」用。**
**所以「按编号前缀授权」是国内平台最常用的做法**:**给用户挂一个前缀,凡是以它开头的设备都可见。**
**简单、不用额外建表、和级联天然对齐。**

**代价是「跨域共享」很难做**:**A 区的人要看 B 区的三路,前缀授权就表达不了。**
**这时才需要「设备组」这种第二套模型。**

**权限组合数算一下就知道为什么要「角色」而不是「逐项勾」**:
  6 种操作 × 5 种设备范围 = 30 种组合
  再加 4 个角色模板 → 实际只需维护 4 条规则

**三十种组合压成四个模板,这才是「角色」存在的理由**——**不是为了分类好看,是为了让人不用逐项勾。**

**最后一个容易忽略的点是「操作留痕」**:**谁在什么时候看了哪一路、转了云台,都要记。**
**这不是合规要求,是「出了事能说清」的要求。**
**很多项目上线时不做,出事时补不上。**

三十种组合压成四条规则,压缩七倍多——这就是角色的全部价值:让管理员不用逐项勾。 但「压缩比」不是越大越好:压得太狠,就会出现「某个用户什么都不够用」的情况, 然后被迫加例外,例外一多,角色就白设计了。 那张角色表里第三行最考验设计:「本域」怎么表达? 答案是「编号前缀」,因为国标编号天生带域信息。 最后那句「操作留痕」是本节最容易被跳过的一条:它不影响功能,只影响「出事时能不能说清」。 而这种事一年可能只发生一次,但那一次很要命。

30 秒实验

  1. 算一下:6 种操作 × 5 种范围 = 多少组合?(30)
  2. 想一下:为什么「按编号前缀授权」实现成本几乎为零?
  3. 想一下:什么时候必须用「设备组」?(跨域共享)

常见误区

  1. 以为「权限就是给不给某个按钮」。 数据范围比功能权限更关键。
  2. 以为「角色越多越灵活」。 角色一多组合就回来了。
  3. 以为「操作留痕是合规摆设」。 它是「出事能说清」的唯一依据。
自测三问(点开对答案) 1. 权限设计里的两个维度是什么? —— **能看哪些设备(数据范围)和能做什么操作(功能权限)**。 2. 「按编号前缀授权」的代价是什么? —— **跨域共享很难做**,需要第二套「设备组」模型。 3. 为什么必须做操作留痕? —— **出了事要能说清谁看了什么、做了什么**。

下一节换一套软件:EasyGBS 是单进程的,配置和拆分方式都不一样。

相关笔记