数据权限设计初探
李俊杰
概述
在许多项目中,都会涉及到数据权限问题,所谓数据权限是表示,在系统中即使角色相同,都有操作权限,但业务操作时受风险、额度、销售区域等业务属性限制。
如销售人员可以看到自己的销售列表,而销售经理可以看到其管辖范围内的销售人员的销售列表,而高级销售经理能看到其下辖的销售经理的销售列表,更进一步,只看金额超过1000万的单子,小于1000万的单子不看。如销售人员是销售产品的,但由于产品属性的不同,如产品属性中销售地区在“苏杭地区”,则北京地区的销售人员则不能销售。如产品属性中风险属性高,则销售人员的级别也要求高,则低级别的销售人员则不能销售该产品;进一步来讲,随着时间或形势的发展,该种产品的风险并没有那么大,低级别的销售人员也可以销售;或者该种产品低级别的销售人员销售该种产品的金额小于100w,而高级别的人员销售100w等等。
架构分析及设计
在设计之初就确定了数据权限所处的位置,和操作权限类似,操作权限一般是放在MVC的controller层,作为插件来控制是否有操作权限。数据权限也可以这样设计,但数据权限更多地是和业务逻辑纠缠在一起,因此数据权限可以作为插件放在业务层(Model),更优雅的设计是以模板模式在业务缺省实现基类中,作为过滤。如下图所示,BizClass其实代表业务层的复杂设计,在做分析设计的过程中,我的经验是尽最大可能理解需求,并尽最大可能直白地把需求展现出来,而不是在设计之初先定义什么设计模式,设计模式是在搞清楚需求并能够给出较完整的设计思路后才考虑的。当然,在设计之初也要首先定义其所在软件架构的位置。
从需求方面讲,要达到根据操作人就能够给出该操作人的数据权限,包括查询的详细程度及数据操作规则等。从这儿我们就可以分析出来要获取数据权限,有两个参数userId,
bizName。
其实任何业务需求的设计的途径都是类似的,都是“来料加工”,有原材料,有目标成品,然后把原材料加工成目标成品。当然在其中要考虑很多因素,面向对象的设计思想很重要,不要在设计之初就考虑要多少个表,表之间的关联关系,什么一对多,多对多,关联表。首先要考虑需要业务上有那些需求,这些业务功能如何转变成某些用例,这些用例是如何转换成若干的业务类,这些类有那些属性或方法来实现这些业务功能。而表仅仅是某些实体类的数据存储,不能表现为业务逻辑。也很难体现设计者的思路。

组织机构与(岗位VS角色)
系统设计中,往往会把操作权限和数据权限混为一谈,使用角色权限来控制,这其实就走入了误区,因为操作权限是解决能不能做的问题,数据权限是解决做多大幅度问题。因为角色是没有级别概念的,也就是说没有上下级概念的。
因此在计了“岗位”的概念,岗位是分级别的,且上下级汇报关系的,在这儿还设计了区域(region)属性,是基于某些需求需要,这样设计是基于有些公司的管理是分为矩阵式管理,既有部门,也根据产品线分为事业群管理的。
如下图所示,组织机构是分上下级的,组织机构中包含若干岗位,因工作职责定岗,用户是属于某个岗位的。这就和原来的设计中组织机构和人的关系中增加了岗位的中间层,也就是说,组织机构中只包含其业务中需要设置的岗位,这些岗位由人员来充实,换句话说,组织机构中不养闲人,呵呵!
岗位中一个重要的概念是资源管理,为了简化设计,某一个岗位只是为处理单一的某个业务所设置的,其中bizes属性表示该岗位所涉及的业务有若干的资源。

业务资源与数据权限规则
这组类的主要功能是完成原材料的准备及数据规则与岗位的映射,其中并没有实体类参与,这些类背后需要数据的支撑,到这时再考虑数据存储不迟。例如BizDatRuler后面就需要实体类,可能是多个相关表的数据。
类Resource中包含多个产品的数据权限规则,在ProductInfo其中dataRulers表示(key=positionGrades value=BizRuler),在类BizDataRuler 属性positionGrades 如:3,4,5,6,以逗号分隔,表示某个规则适用与某些级别的岗位,属性productRulers的HashMap<String productAttr,String scope>,其中scope中关于数字范围用“[()]”表示,“[”表示大于等于,“(”表示大于,“)”表示小于,"]"表示小于等于,如“[300,550)”表示大于等于300,小于500。如果是散列数,用“{}”表示,如“{30,50,70}”表示只有属性等于30,40,50的才有数据权限,如“{上海,苏州,杭州}”在表示只在上海,苏州,杭州有效。这就类似与格式化文本的处理方式,简化了文本解析。
附录:数据权限模块设计类图:
努力,在于我热爱我的事业,与中国的软件一起走向成熟,走向世界。
联系作者:lijj_72@hotmail.com
相关推荐
前言部分强调了权限设计的重要性,指出在信息化社会,保护数据安全和隐私成为不可忽视的任务。目标是建立一套灵活、可扩展且易于管理的权限管理系统,确保用户只能访问他们被授权的资源,同时避免权限滥用和数据泄露...
此外,文章还提出了云端重加密算法的概念,这是基于云计算访问控制特点设计的加密技术,可以用于提高云计算环境下的数据安全性。 在云计算环境下,数据存储安全的技术难度较之传统存储环境有所提高。除了上述提到的...
### 权限设计原理 #### 一、权限设计概要 **1.1 前言** 权限设计是一项复杂的任务,但本质上可以简化为一种逻辑判断:“谁(Who)对什么(What)进行了怎样的(How)操作”。权限设计的目标是在项目的实际需求和...
元数据可以描述系统表格、分区设置、索引、视图定义和权限管理等项目内容,为数据仓库的建设和管理提供支持。 维度表作为进入事实表的入口,其质量和深度直接关系到数据仓库的整体性能。维度表包含了业务的文字描述...
【初探云安全】 云安全是信息安全领域的一个重要分支,尤其在当今数字化转型的时代,企业和个人越来越多地依赖云计算服务。云计算提供了灵活、便捷的计算资源分配方式,但同时也带来了新的安全挑战。本文将深入探讨...
综上所述,智能交通系统设计初探是一次对城市交通管理革新的探索。它通过集成现代信息技术,解决了传统交通管理中的诸多问题,展现了强大的应用价值和广阔的发展前景。未来的智能交通系统将更加智能、高效,为人类...
【MySQL云数据库分析与设计初探】 随着信息技术的飞速发展,云计算已成为数据共享和信息服务的新基础设施。云计算的核心在于通过互联网将硬件和软件资源池化,以满足用户按需使用和扩展的需求。其中,Platform-as-a...
### SaaS模式软件访问控制设计初探 #### 一、访问控制研究现状 随着网络技术的飞速发展,大型网络应用系统面临着日益严峻的数据资源安全挑战。为了应对这些挑战,访问控制技术作为确保信息系统安全性的关键手段之...
根据给定的文件内容,以下是对“基于PLC网络的控制系统通信设计初探”一文的知识点详细阐述: 首先,文章标题中提到的“PLC网络”指的是“可编程逻辑控制器网络”(Programmable Logic Controller Network),它是...
基于PHP的教学软件系统设计初探主要探讨了如何利用PHP技术构建一个高效的教学资源管理系统,以适应高职高专教育对于教学资源管理的需求。PHP(超文本预处理器)作为一种服务器端的HTML嵌入式脚本语言,因其语法特性...
在数据仓库(原书中文第四版)这本书中,可能会深入探讨数据仓库的设计原理和构建方法,这是BI的基础。数据仓库是将来自不同业务系统的数据整合到一起,经过清洗和转换,形成适合分析的数据环境。这个过程包括了ETL...
Struts2是一个基于MVC(Model-View-Controller)设计模式的开源JavaEE框架,它在Web应用开发中被广泛使用。这篇博文“Struts2初探”将带领我们走进Struts2的世界,探讨其核心概念和使用方法。 首先,我们要理解...
这可能涉及到设计复杂的加密系统,以及设定权限控制,防止未经授权的访问和使用。 其次,责任归属是医疗机器人伦理设计中的关键问题。当机器人出现故障或造成意外时,应由制造商、编程者还是医疗机构承担责任?这...
【领域驱动设计初探(6):领域服务】 在领域驱动设计(Domain-Driven Design,简称DDD)中,领域服务是解决复杂业务逻辑的关键组成部分。领域服务关注的是那些跨越单个实体或值对象职责的领域操作,它们通常涉及到...
Kettle的使用从创建数据库连接开始,通常需要在目标数据库中为Kettle创建专门的用户,并赋予必要的权限,如CONNECT和RESOURCE角色,以便进行数据的读写操作。随后,通过图形界面构建数据仓库,即所谓的“资料库”,...
COM(Component Object Model)是微软提出的一种组件对象模型,它是一种软件架构,允许不同应用程序之间的交互和数据共享。本文将深入探讨COM技术,为初学者提供一个基础的了解和实践平台。 COM的核心概念是组件,...
由于这个网站的设计仅实现了基础的前端表单和PHP数据交互,因此很适合用来展示SQL注入的可能性。 SQL注入的危害主要包括: 1. 数据泄露:攻击者可以获取或修改数据库中的敏感信息,如用户密码、个人信息等。 2. ...
JSP和Servlet可以结合过滤器、安全框架(如Spring Security)来防止SQL注入、XSS攻击等,同时,系统需要保护用户的隐私数据,如使用HTTPS协议加密传输,以及对敏感操作进行身份验证和权限控制。 总的来说,这篇论文...
数字图书馆云计算项目管理模式初探涉及到的IT知识点...以上知识点涵盖了数字图书馆云计算项目管理模式的多个方面,从系统设计到安全防护,从数据管理到资源服务,为数字图书馆的云转型提供了全面的技术支持和管理指导。
《Android开发常用技术初探》 在移动互联网的飞速发展中,Android系统占据了智能手机市场的主要份额,成为开发者和用户关注的焦点。Android以其开源、灵活的特性吸引了众多开发者,不断推动着应用程序的创新和发展...