曾经看到过这样一个需求:他想知道,新西兰电话号码列表 我“为什么”能够看到这条数据? 如果这条数据是我自己创建的,那么其他能看到这条数据的人,都由于什么原因呢? 我的第一反应是:数据权限设计的太复杂了。 随后又想到: “为什么数据权限要设计的这么复杂呢,新西兰电话号码列表 有没有更好的实现方案?” 但在回答这个问题之前,可能要先完成另一件事情,分析清楚到底什么是数据权限? 都有哪些业务场景,需要数据权限的支持? 简单来讲,数据权限就是“用户是否能够查看数据”,主要是为了业务系统的信息安全考虑,不同的人,在不同的场景下,所能看到的数据范围也不一样。新西兰电话号码列表 为了行文方便,后续统一使用“查看数据”进行描述,实际上像增/删/改/查/锁定/解锁/分享等的数据权限类型有很多,就不在本文中介绍了。 本文将结合在工作中遇见的一些业务场景,新西兰电话号码列表 跟大家分享一些常见的数据权限设计,也希望能够总结出一套,最符合本公司业务的数据权限架构体系。 一、基础数据权限 1. 对象级权限 基础数据权限通常会承载到一个权限媒介上,比如说权限集,职能等。他通常包括两部分,对象级权限与字段级权限。 简单来讲,对象级权限可以控制到一个用户是否能够看到某一个业务菜单或者业务Tab,也就是说用户甚至可以不知道系统中有这一类的数据。新西兰电话号码列表 对象级权限的设计会包含下面几部分。 当然,对于不同的企业,可能还会有更精细的管理,比如针对数据的转移,锁定/解锁等基本功能可以也需要做控制。 关于“查询所有关联”和 “修改所有关联”,他的权限优先级是要高于其他权限规则。比如商机、订单、报价单等业务对象都关联了客户,新西兰电话号码列表 那么如果在客户上设置了“查询所有关联”的话,就会覆盖掉具体关联业务实体设置的对象级权限。 2. 字段级权限 根据业务需要,即使可以看到某个业务对象,但也需要对某些隐私字段做数据权限处理。
如果企业的系统中,有包含页面布局的相关设置,那么字段级权限设置,要覆盖掉布局的设置。 二、记录级数据权限 其实对于很多业务系统来说,可能上面的基础数据权限设计已经能够满足大部分数据权限场景了,但问题是有一类“特殊场景”解决不了。 某“一部分”数据,只允许“一部分”人查看。 几乎所有复杂的数据权限设计,都是为了解决这个问题,而且因为使用场景差异太大,很难找到一个一揽子解决方案。所以需要多种方案结合,新西兰电话号码列表 才能在便捷性、安全性上,满足中大企业复杂的数据权限要求。 1. 系统默认权限 要想解决 某“一部分”数据,只允许“一部分”人操作,理论上那就意味着每一条数据都应该可以被控制。 那么 每一个用户与每一条数据之间到底是什么关系,是业务系统需要回答的第一个问题。 通常来讲,系统默认权限应该是“最严格的”,“唯一”的“限制”数据权限的方式,新西兰电话号码列表 其他的记录级数据权限,应该是在系统默认权限的基础上,增加额外的数据权限。 比如最极端的限制条件,所有的业务数据都是不可见的。 当然对于某些公司来讲,一些数据是全员可见的,比如像公告、通讯录、社区帖子等类型的数据。 新西兰电话号码列表 系统默认权限如果需要修改,应该要受到严格的控制流程管理,毕竟这是整个数据权限架构中,唯一的限制。 2. 记录所属人 通常来说,如果一个用户拥有某个业务实体创建对象的权限,那么针对这条特定的记录,用户创建完成记录后,会自动变为这条记录的所属人(owner)。 在系统默认权限的基础上,记录的所属人就属于一种新增的数据权限,可以对这个用户进行查看操作(可进行的操作应该基于基础数据权限)。 由于业务的需要,记录会在不同的用户之间进行数据转移的操作(transfer ownership),所以记录所属人,不一定是记录的创建人。