这一篇让你彻底搞懂 SaaS 产品的数据权限设计!

8 评论 12301 浏览 98 收藏 12 分钟

数据权限是SaaS产品必不可少的功能,明确权限管控的颗粒度,保障数据安全。本文作者对如何SaaS 产品的数据权限该如何设计展开了分析,希望对你有帮助。

最近正好在做数据权限这块的产品设计,同时拆解完纷享销客的 PaaS 平台后,又受到了新的启发。事实上,我发现不少 SaaS 的产品经理都没有接触过数据权限这块的产品设计 —— 通常,如果经历过从0-1的 SaaS 产品过程的话,就会知道数据权限是一开始就需要设计和开发的。

本篇就来和大家讲讲如何设计数据权限产品功能。

一、数据权限是什么?

我想如果面试的时候来问产品经理这个问题,估计会得到很多不一样的答案。简单的回答可能就是“对系统的数据进行访问控制”,而这相当于没有回答。

实际上,我认为要从三个方面回答这个问题。

  • 一是控制登录人访问的数据范围,不该看的不能看;
  • 二是控制登录人操作数据的行为,不该管的不能管;
  • 三是控制登录人能够查看的业务对象属性,敏感的属性要管控。

数据权限一是控制登录人访问的数据范围,不该看的不能看;二是控制登录人操作数据的行为,不该管的不能管;三是控制登录人能够查看的业务对象属性,敏感的属性要管控。

二、怎么控制数据权限?

我们来看看应该怎么来控制登录人的数据权限,这里可以分为数据范围权限控制、数据操作权限控制和业务对象字段权限控制。

1. 数据范围权限控制

B 端客户内部的业务对象通常来说会按管理层级划分管辖范围,比如我曾经做过的物业平台,他们会按小区(也叫物业项目)、片区、分公司、大区和总部五个层级来划分管辖范围。

这里的小区其实就是一个基础的授权业务对象,然后将多个小区集合起来会形成片区。同时,经营小区的会是具有法人资质的主体,即分公司。多个分公司又会按地理区域划分到不同的大区,最后到总部管辖全部的业务数据。这个时候,我们就需要支持从基础的业务对象到更大范围的数据授权。

比如下面几个场景:

  • A 小区的物业项目经理授权 A 小区,他只能看到 A 小区的各类业务数据(报修、投诉、收费等等);
  • B 片区的物业片区经理授权 B 片区,他能够看到 B 片区下的全部小区的各类业务数据,包括以后在 B 片区再新增的小区。
  • C 公司的物业分公司总经理授权 C公司,他能够看到C 公司下的全部小区的各类业务数据,包括以后在C 公司再新增的小区。
  • D 大区的物业大区经理授权D大区,他能够看到D 大区下的全部小区的各类业务数据,包括以后在 D大区下各个分公司新增的小区。
  • 总部的集团领导可以看到全部的小区各类业务数据。

通常来说,不同层级的授权方式是互斥的,也就是一个人不能说既按小区级别授权又按片区级别授权。同时,同一个层级的,是支持授权多个的。

对于 B 端客户的外部业务对象,因为不存在管辖层级,往往是通过分配的方式进行。即将一个或多个业务对象分配给某类角色或某个员工,登录人只能看到分配给自己的业务对象。典型的就是 CRM 系统的客户公海资源,员工只能看到分配给自己的客户。

2. 业务对象操作权限控制

业务对象操作权限是指对业务对象以及业务对象属性能够进行的操作。典型的业务对象的操作就是新增、删除、编辑、查看、导出、改变业务对象状态(如市场线索转销售线索)等等。比方说,我们控制 A 员工只能查看客户信息,不能新增、编辑、删除和导出客户信息。

3. 业务对象字段权限控制

业务对象字段的颗粒度就更小一点,是针对某个类型的业务对象,约束登录人能查看、编辑或导出业务对象的哪些属性。业务对象属性在技术上对应的是数据表的字段。

举个例子,CRM 系统的“客户”这个业务对象,会有名称、地址、电话、级别、所属行业等等信息。我们就可以控制A 员工(或角色)只能查看客户名称、级别和所属行业,不允许查看地址和电话。

三、数据权限产品设计

接下来我们看数据权限的产品怎么设计。

1. 数据范围权限设计

数据范围权限控制首先我们要明确系统的基础业务对象,比如物业平台的小区、房地产管理的楼盘、WMS的仓库、线下商超的门店等等,这些都可以作为基础的授权业务对象。然后,基于基础业务对象构建管理层级,划分到不同层级的不同集合里。之后,就可以授权某个角色或人员拥有的管辖范围,下面是一个示例。

给业务对象分配成员的比较简单,基于业务对象添加成员或者移除成员即可,在文档协作类产品非常常见。

2. 业务对象操作权限设计

控制业务对象的操作权限,我们首先要基于某类业务对象定义好这类业务对象有哪些操作,然后再勾选某个角色或人员有能够进行哪些操作。

业务对象的操作涉及如下信息:

  • 操作名称:比如操作按钮的名称;
  • 操作标识:系统全局唯一的标识,前端可以通过这个标识来决定是否展示相应的操作入口;
  • 显示方式:即操作入口是隐藏还是禁用。隐藏是比较常见的操作,但是禁用的话可以让登录人知道他没有这个权限,如果需要可以找他们内部的管理员开通。
  • 对应数据接口:即对应操作的数据接口,这个是防止有人知道了数据接口,绕过操作按钮直接访问接口来获得数据,通过同时禁止数据接口的访问权的安全等级会更高一些。

下面是纷享销客的业务对象操作权限控制的界面,大家可以参考一下。

3. 字段操作权限设计

字段操作权限和业务对象操作权限类似,我们也需要先定义好业务对象的字段属性,主要的信息如下:

  • 名称:字段的显示名称,如姓名、手机号等都是字段的名称;
  • 数据表字段名:对应业务对象数据表的字段名,技术上需要通过这个字段名来控制字段的权限;
  • 显示方式:即未授权该字段时该如何显示,目前有两种做法,一是直接隐藏;二是脱敏。直接隐藏比较简单,但是可能会引起页面布局不美观;脱敏则是隐藏掉部分的内容,比如手机号中间4位使用“*”号替代,这种方式的好处是页面布局不需要改动,但需要开发做一定的处理。
  • 是否必选:有些字段是不能来控制权限的,比如客户名称,如果客户名称都不显示了,那么这条数据都没有意义了,因此需要定义业务对象的主要字段是必须勾选的,不可以禁止相应的字段权限。

字段的操作一般只有读取、编辑和导出,因此字段操作上不需要单独管理。下面同样给出了纷享销客的字段授权的界面,供大家参考。

四、总结

总的来说,数据权限的授权分为三个方面,业务对象范围授权、业务对象操作授权和业务对象字段授权。

为了实现这三个方式的授权,我们在产品设计上需要支持业务对象范围的划分、业务对象操作的定义和业务对象字段的定义,如下图所示。之后,我们就可以配置某个角色或人员的数据权限了。

数据权限是SaaS产品必不可少的功能。企业的数据很多涉及敏感信息,包括商业机密信息等等,因此必须在产品规划之初就明确权限管控的颗粒度,以及按何种方式管理数据权限。希望看了本篇之后,能够给大家一些参考和启发。

专栏作家

产品海豚湾,公众号:产品海豚湾(ID:pm-dophin-bay),人人都是产品经理专栏作家。技术出身的产品经理,从事过 C 端产品和 B 端产品设计,擅长 SaaS 产品设计、产品架构设计和需求分析。负责的B 端产品完成了完整的从0到1,从1到 N 的过程,成功签约行业百强客户。

本文原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议。

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 请教个问题,如果同一个用户在不同的资源下,操作权限不一致,如何设计?
    比如,第一个物业公司的权限管控案例,如果张三负责多个片区的管理,他是A片区的物业总经理(操作权限较大),同时他也是B片区的楼栋管家(操作权限较小)。这种情况下,权限如何设计?

    来自湖北 回复
    1. 每个用户有什么权限是根据这个用户分配了什么角色决定的,想你说的这种;建两个角色给这个用户分配上就行了:1个角色是A区物业总经理,一个是B片区管家

      来自北京 回复
    2. 角色控制的是操作权限,数据权限可不是通过角色控制的。

      来自四川 回复
    3. 请问这个场景您这边是如何解决的?我们也遇到这个问题,同一个人在系统中有不同的岗位,且不同岗位的数据权限需要不同

      来自北京 回复
  2. 数据范围产品设计可以讲的更深入一些,这块是核心。比如按照组织架构、独立分配,独立分配又可以按照属性(部门等等)过滤条件分配,这样才能构建一个比较贴近实际业务需要的数据权限。

    来自上海 回复
  3. 很棒!请教个问题,字段权限这个受菜单限制么,还是整个系统这个字段全部限制了?

    来自广东 回复
    1. 这个应该是每个菜单里的字段,其他菜单即使同名也是算另一个字段。有的会通过引用或关联等方式将两个菜单的字段连接起来,可能会让你觉得是同一个字段

      来自四川 回复
    2. 一般人员都会有一个人员类型的字段,可以在角色的基础上再通过这个人员类型字段去判断字段权限。

      来自四川 回复