电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

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

来源:金蝶云社区作者:金蝶2024-09-228

直接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报表如何实现数据授权功能?

问题描述:直接SQL报表如何实现数据授权?例如需要根据当前登录用户进行核算项目的数据权限控制怎么实现?解决方案:【第一步】:根据核算...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信