数据级权限设计与实现

概述

系统权限可分为很多种。常用到的有操作权限和数据权限。操作权限是有或者没有某种操作的权限,具体表现形式可为看到或者看不到某个菜单或者功能按钮。数据权限指的是数据级别的权限设计,立足点在于组织机构(岗位、部门、公司)和流程,对应的用户没有对某些数据的访问权限。本文档旨在设计数据权限的控制方案,完善产品数据权限的控制。

设计思路

通过之前平台规定每张业务表的必备字段(公司、创建人、流程参与人)来设计一些规则来配置某个程序的数据权限控制规则。设计数据权限配置程序来配置单个程序或者批量配置一批程序的权限规则。程序在运行过程中根据配置的数据权限控制规则来动态构建查询SQL,从而达到数据权限的控制。各个数据级权限控制规则为or的关系。

数据权限控制规则

梳理现有业务场景以及业务程序数据表的结构。整理出以下一些可以进行配置的规则:

1、数据建立用户

即当前程序记录的创建人,配置此选项后非当前记录的建立人不能看到此记录。
建议:如果程序开启数据权限控制,此选项默认勾选,并且不能去除,否则如果配置了其他控制规则,业务记录的创建人都不能看到自己创建的记录。

2、建立人直接上级岗位

即当前程序记录创建人的直接上级岗位的用户能看到此记录。
考虑到当前建立用户可能在不同公司有不同的岗位,或者在同一个公司也可能有多个岗位。这里取用户岗位时获取的是数据建立用户在当前记录中的公司所拥有的主岗的岗位号(没有主岗取所有副岗)。然后根据取到的岗位去获取其直接上级岗位。

3、建立人所有上级岗位

即当前程序记录创建人的所有上级岗位(需要进行递归)的用户能看到此记录。取用户岗位的逻辑参考第2条。

4、建立人当前部门

即当前程序记录创建人所在部门的用户能看到此记录。
考虑到当前建立用户可能在不同公司有不同的部门,或者在同一个公司也属于不同的部门。这里取用户的部门时获取的是建立用户在当前记录中的公司中所属的主岗所在的部门的部门号(没有主岗取所有副岗所属的部门号)。

5、建立人所有上级部门

即当前程序记录创建人所在部门的所有上级部门(需要进行递归)中的用户能看到此记录。(不包括当前部门)
取部门的逻辑参考第4条。

6、当前公司

即当前程序记录中的公司下的所有用户能看到此记录。
备注:
(1)配置公司数据级权限时需要考虑和平台公司条件的关系,是否取交集、并集或者是去除平台公司条件?
(2)同时需要考虑S页面公司列查询时用户能选到的公司

7、所有上级公司

即当前程序记录中的公司的所有上级公司都能看到此记录。(不包括当前公司)

8、流程参与人

如果当前记录走流程,则所有的流程处理人(已处理和待处理)和知会人都能看到此记录。
问题:
1、所有流程的参与人具体包含哪些用户?
2、每一类型的参与人是否需要进行分类配置?

备注:
(1)在配置了第6条“当前公司”规则时,在解析条件时,可以忽略2、3、4、5条中配置的条件。

(2)特殊岗位的情况,某些领导拥有查看所有数据的权限。 

/**
 * 贴一段初始化数据级权限的逻辑吧
 * @author chengmeng
 */
public static void initDataPer(DataDom dataDom){
    //1.获取数据级权限的配置项
	//2.获取当前登录人的当前部门/当前岗位/所有下级部门/所有下级岗位
    //3.特殊岗位可以查看所有数据(此处所有数据是指在平台基本条件下的所有数据)
    //4.根据配置规则拼接SQL语句
    //4-1.创建者
    //4-2.流程参与者(不从配置中读取,默认)
    //4-3.部门和岗位类
    //所有部门包含所在部门和子部门;所有岗位包含所在岗位和下级岗位;
    //如果配置了所在部门即包含了所在岗位;如果配置了所在岗位即包含了下级岗位
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值