欢迎来到天天文库
浏览记录
ID:49531926
大小:25.33 KB
页数:3页
时间:2020-03-02
《通用数据权限解决方案.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、通用数据权限解决方案1.问题提出如何能通用的进行数据权限处理。2.主要思路从数据库角度来看,数据权限的实现最终都是落在用某张表的某个字段取值范围来达到。结合公司技术平台现状,提出本模型。3.定义数据权限模型1、用户使用某个功能单元,其数据权限通过角色来配置。2、单元数据权限授权操作符是符合sql的操作符:=<=like,特殊操作符:all3、功能单元:是否有数据权限—本单元是否启用数据权限控制;采用数据权限模式--本单元采用哪种数据模式1、数据权限模式:数据对象(表名)--数据权限控制所用的表名;权限字段—用哪个字段进行权限控制;过滤条件--符合where语法的过滤语句,必须是数据
2、对象表的字段,值内容固定。比如一个组织表,包含行政组织、工会组织,但现在只是用行政组织进行,则用“组织类型=行政组织”来过滤即可1.授权对于有数据权限的单元,在角色授权时,只需要定义数据权限的“操作符”即可。2.使用1)权限模块提供获取单元数据权限接口入口参数:帐户,单元出口参数:数据对象,权限字段,操作符,权限值,过滤条件如果出口参数为空,表示不进行数据权限控制如果出口参数的“操作符”为“all”,也表示不进行数据权限控制*另一种出口参数定义:数据对象,过滤的sql2)单元在数据查询时,获取当前单元数据授权3)单元获取的本单元数据权限,对于结果不做任何加工,直接随着查询传到数据层
3、(数据层提供特殊操作符“DATAPRIV”,code也固定为“smt_priv_def”)。在编码时,做单元查询时总是要做该步,而不用关心本单元实际是否定义了数据权限。4)数据层处理逻辑:按正常处理传入的查询条件,对于operator="DATAPRIV"做如下特殊处理:(1)判断"权限结果"为空或"权限结果.操作符"为空,则不起作用(2)如果单元所查询的所有数据对象,都不包含"权限结果.数据对象",则不起作用(3)否则:拼装权限sql(权限字段,操作符,权限值),嵌入
4、到业务查询sql(逻辑上是把数据对象表进行权限过滤的结果作为业务查询对应的表)3.方案通用性说明1)需要扩展数据权限时,只需要增加一种权限模式及实现即可。对其它程序完全透明。2)单元不需要先考虑是否要有数据权限,统一在查询中加上调用获取数据权限接口,并传给数据层即可。3)数据层不需要考虑单元特性,只从数据角度处理数据权限。4)该模型具有容错性,即使错误的定义了数据权限,也不会导致由于数据权限引起的错误。1.方案优缺点优点:通用,可灵活扩展,容错性,开发人员不需要关注数据权限缺点:本方案数据权限只能基于单数据对象,不能基于多数据对象。实现需要服务层、数据层配合;由于每个单元查询都需要
5、调用获取数据权限接口,大并发可能会引起性能问题(每次webservice调用需要40-60ms)
此文档下载收益归作者所有