您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据挖掘与识别 > 通用数据权限解决方案
通用数据权限解决方案1.问题提出如何能通用的进行数据权限处理。2.主要思路从数据库角度来看,数据权限的实现最终都是落在用某张表的某个字段取值范围来达到。结合公司技术平台现状,提出本模型。3.定义数据权限模型1、用户使用某个功能单元,其数据权限通过角色来配置。2、单元数据权限授权操作符是符合sql的操作符:==like,特殊操作符:all3、功能单元:是否有数据权限—本单元是否启用数据权限控制;采用数据权限模式--本单元采用哪种数据模式class数据权限模型功能单元-是否有数据权限:int-采用数据权限模式:int单元数据权限授权-角色:char-单元:char-操作符:char-操作符名称:char数据权限模式-模式名称:char-数据对象(表名):char-权限字段:char-过滤条件:char角色用户4、数据权限模式:数据对象(表名)--数据权限控制所用的表名;权限字段—用哪个字段进行权限控制;过滤条件--符合where语法的过滤语句,必须是数据对象表的字段,值内容固定。比如一个组织表,包含行政组织、工会组织,但现在只是用行政组织进行,则用“组织类型=行政组织”来过滤即可4.授权对于有数据权限的单元,在角色授权时,只需要定义数据权限的“操作符”即可。5.使用1)权限模块提供获取单元数据权限接口入口参数:帐户,单元出口参数:数据对象,权限字段,操作符,权限值,过滤条件如果出口参数为空,表示不进行数据权限控制如果出口参数的“操作符”为“all”,也表示不进行数据权限控制*另一种出口参数定义:数据对象,过滤的sql2)单元在数据查询时,获取当前单元数据授权3)单元获取的本单元数据权限,对于结果不做任何加工,直接随着查询传到数据层(数据层提供特殊操作符“DATAPRIV”,code也固定为“smt_priv_def”)。Itemoperator=DATAPRIVcode=smt_priv_defvalue=权限结果/在编码时,做单元查询时总是要做该步,而不用关心本单元实际是否定义了数据权限。4)数据层处理逻辑:按正常处理传入的查询条件,对于operator=DATAPRIV做如下特殊处理:(1)判断权限结果为空或权限结果.操作符为空,则不起作用(2)如果单元所查询的所有数据对象,都不包含权限结果.数据对象,则不起作用(3)否则:拼装权限sql(权限字段,操作符,权限值),嵌入到业务查询sql(逻辑上是把数据对象表进行权限过滤的结果作为业务查询对应的表)6.方案通用性说明1)需要扩展数据权限时,只需要增加一种权限模式及实现即可。对其它程序完全透明。2)单元不需要先考虑是否要有数据权限,统一在查询中加上调用获取数据权限接口,并传给数据层即可。3)数据层不需要考虑单元特性,只从数据角度处理数据权限。4)该模型具有容错性,即使错误的定义了数据权限,也不会导致由于数据权限引起的错误。7.方案优缺点优点:通用,可灵活扩展,容错性,开发人员不需要关注数据权限缺点:本方案数据权限只能基于单数据对象,不能基于多数据对象。实现需要服务层、数据层配合;由于每个单元查询都需要调用获取数据权限接口,大并发可能会引起性能问题(每次webservice调用需要40-60ms)
本文标题:通用数据权限解决方案
链接地址:https://www.777doc.com/doc-2007199 .html