这一篇让你彻底搞懂 SaaS 产品的数据权限设计!
前言
最近正好在做数据权限这块的产品设计,同时拆解完纷享销客的 PaaS 平台后,又受到了新的启发。事实上,我发现不少 SaaS 的产品经理都没有接触过数据权限这块的产品设计 —— 通常,如果经历过从0-1的 SaaS 产品过程的话,就会知道数据权限是一开始就需要设计和开发的。本篇就来和大家讲讲如何设计数据权限产品功能。
数据权限是什么?
我想如果面试的时候来问产品经理这个问题,估计会得到很多不一样的答案。简单的回答可能就是“对系统的数据进行访问控制”,而这相当于没有回答。实际上,我认为要从三个方面回答这个问题。一是控制登录人访问的数据范围,不该看的不能看;二是控制登录人操作数据的行为,不该管的不能管;三是控制登录人能够查看的业务对象属性,敏感的属性要管控。
数据权限一是控制登录人访问的数据范围,不该看的不能看;二是控制登录人操作数据的行为,不该管的不能管;三是控制登录人能够查看的业务对象属性,敏感的属性要管控。
怎么控制数据权限?
我们来看看应该怎么来控制登录人的数据权限,这里可以分为数据范围权限控制、数据操作权限控制和业务对象字段权限控制。
B 端客户内部的业务对象通常来说会按管理层级划分管辖范围,比如我曾经做过的物业平台,他们会按小区(也叫物业项目)、片区、分公司、大区和总部五个层级来划分管辖范围。
这里的小区其实就是一个基础的授权业务对象,然后将多个小区集合起来会形成片区。同时,经营小区的会是具有法人资质的主体,即分公司。多个分公司又会按地理区域划分到不同的大区,最后到总部管辖全部的业务数据。这个时候,我们就需要支持从基础的业务对象到更大范围的数据授权。比如下面几个场景:
A 小区的物业项目经理授权 A 小区,他只能看到 A 小区的各类业务数据(报修、投诉、收费等等);
B 片区的物业片区经理授权 B 片区,他能够看到 B 片区下的全部小区的各类业务数据,包括以后在 B 片区再新增的小区。
C 公司的物业分公司总经理授权 C公司,他能够看到C 公司下的全部小区的各类业务数据,包括以后在C 公司再新增的小区。
D 大区的物业大区经理授权D大区,他能够看到D 大区下的全部小区的各类业务数据,包括以后在 D大区下各个分公司新增的小区。
总部的集团领导可以看到全部的小区各类业务数据。
通常来说,不同层级的授权方式是互斥的,也就是一个人不能说既按小区级别授权又按片区级别授权。同时,同一个层级的,是支持授权多个的。
对于 B 端客户的外部业务对象,因为不存在管辖层级,往往是通过分配的方式进行。即将一个或多个业务对象分配给某类角色或某个员工,登录人只能看到分配给自己的业务对象。典型的就是 CRM 系统的客户公海资源,员工只能看到分配给自己的客户。
业务对象操作权限是指对业务对象以及业务对象属性能够进行的操作。典型的业务对象的操作就是新增、删除、编辑、查看、导出、改变业务对象状态(如市场线索转销售线索)等等。比方说,我们控制 A 员工只能查看客户信息,不能新增、编辑、删除和导出客户信息。
业务对象字段的颗粒度就更小一点,是针对某个类型的业务对象,约束登录人能查看、编辑或导出业务对象的哪些属性。业务对象属性在技术上对应的是数据表的字段。举个例子,CRM 系统的“客户”这个业务对象,会有名称、地址、电话、级别、所属行业等等信息。我们就可以控制A 员工(或角色)只能查看客户名称、级别和所属行业,不允许查看地址和电话。
数据权限产品设计
接下来我们看数据权限的产品怎么设计。
数据范围权限控制首先我们要明确系统的基础业务对象,比如物业平台的小区、房地产管理的楼盘、WMS的仓库、线下商超的门店等等,这些都可以作为基础的授权业务对象。然后,基于基础业务对象构建管理层级,划分到不同层级的不同集合里。之后,就可以授权某个角色或人员拥有的管辖范围,下面是一个示例。
给业务对象分配成员的比较简单,基于业务对象添加成员或者移除成员即可,在文档协作类产品非常常见。
控制业务对象的操作权限,我们首先要基于某类业务对象定义好这类业务对象有哪些操作,然后再勾选某个角色或人员有能够进行哪些操作。业务对象的操作涉及如下信息:
操作名称:比如操作按钮的名称;
操作标识:系统全局唯一的标识,前端可以通过这个标识来决定是否展示相应的操作入口;
显示方式:即操作入口是隐藏还是禁用。隐藏是比较常见的操作,但是禁用的话可以让登录人知道他没有这个权限,如果需要可以找他们内部的管理员开通。
对应数据接口:即对应操作的数据接口,这个是防止有人知道了数据接口,绕过操作按钮直接访问接口来获得数据,通过同时禁止数据接口的访问权的安全等级会更高一些。
下面是纷享销客的业务对象操作权限控制的界面,大家可以参考一下。
字段操作权限和业务对象操作权限类似,我们也需要先定义好业务对象的字段属性,主要的信息如下:
名称:字段的显示名称,如姓名、手机号等都是字段的名称;
数据表字段名:对应业务对象数据表的字段名,技术上需要通过这个字段名来控制字段的权限;
显示方式:即未授权该字段时该如何显示,目前有两种做法,一是直接隐藏;二是脱敏。直接隐藏比较简单,但是可能会引起页面布局不美观;脱敏则是隐藏掉部分的内容,比如手机号中间4位使用“*”号替代,这种方式的好处是页面布局不需要改动,但需要开发做一定的处理。
是否必选:有些字段是不能来控制权限的,比如客户名称,如果客户名称都不显示了,那么这条数据都没有意义了,因此需要定义业务对象的主要字段是必须勾选的,不可以禁止相应的字段权限。
字段的操作一般只有读取、编辑和导出,因此字段操作上不需要单独管理。下面同样给出了纷享销客的字段授权的界面,供大家参考。
总结
总的来说,数据权限的授权分为三个方面,业务对象范围授权、业务对象操作授权和业务对象字段授权。为了实现这三个方式的授权,我们在产品设计上需要支持业务对象范围的划分、业务对象操作的定义和业务对象字段的定义,如下图所示。之后,我们就可以配置某个角色或人员的数据权限了。
数据权限是SaaS产品必不可少的功能。企业的数据很多涉及敏感信息,包括商业机密信息等等,因此必须在产品规划之初就明确权限管控的颗粒度,以及按何种方式管理数据权限。希望看了本篇之后,能够给大家一些参考和启发。