直接SQL报表如何实现数据授权功能?

问题描述:
直接SQL报表如何实现数据授权?例如需要根据当前登录用户进行核算项目的数据权限控制怎么实现?
解决方案:
【第一步】:
根据核算项目类别ID,查询到对应核算项目的数据授权表及查看、修改、删除的权限字段名和权限掩码
例如查出客户的数据授权表为Access_t_Organization 几乎所有的核算项目的查看、修改、删除的权限字段名和权限掩码都是以下这样:
--FDataAccessView:1 FDataAccessEdit:4194304 FDataAccessDelete:65536
--此SQL脚本示例以检查核算项目的查看权限(FDataAccessView)为例
select FAccessTable,* from t_AccessRowData where fclassid=1
【第二步】:
根据用户ID获取二进制位权限信息(FAccessUUID)
Select top 1 t1.FUserID,t1.FAccessUUID from t_User t1 where t1.FUserID=16501
and t1.FAccessUUID>0
Union
Select t2.FUserID,t2.FAccessUUID from t_Group t1 left join t_User t2 on
t1.FGroupID=t2.FUserID where t1.FGroupID<>0 and t1.FUserID=16501
and t2.FAccessUUID>0
【第三步】
根据上两步查出来的数据权限表(Access_t_Organization)和权限字段名(FDataAccessView)
以及用户的二进制权限位(FAccessUUID值为:108)
按照固定的算法,拼接出数据权限关键过滤条件Substring...
DECLARE @ByteNum AS INT
DECLARE @Comp AS INT
DECLARE @AccessUUID AS INT
SET @AccessUUID=108 --此变量值为第二步查出来用户的二进制权限位(FAccessUUID)
SET @ByteNum = floor(@AccessUUID / 8) + 1
SET @Comp = power(2,(7 - ((@AccessUUID + 7) Mod 8)))
Substring(Access_t_Organization.FDataAccessView,@ByteNum,1) & @Comp & <>0
--如果@AccessUUID=108,则计算出来的过滤条件结果为:
Substring(Access_t_Organization.FDataAccessView,14,1) & 16 & <>0
【第四步】:
将核算项目物理表(t_Organization)左连接上核算项目数据权限表(Access_t_Organizati
直接SQL报表如何实现数据授权功能?
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



