打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
金蝶记账软件K3wise直接SQL报表如何实现数据授权功能?

会计报表管理分析模板

各行业会计分录大全

企业财务管理制度

纳税申报指南

需要财务记账软件安装维护服务的会计朋友,联系客服QQ:1615264857
服务项目:远程安装、建账服务、账套备份、补账调账、账套升级、账套数据合并、数据恢复、共享联机、初始化、以及日常疑难杂症账务处理、财税实操干货分享。


K3wise直接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_Organization),

再拼接上第三步计算出来的关键过滤条件(Substring(Access_t_Organization.FDataAccessView,14,1) & 16 & <>0)

由于表连接时用了表别名,注意替换过滤条件中的表名(Access_t_Organization)为SQL中使用的表别名(Access_t_Organization1)

最终形成的数据权限过滤的SQL如下,此SQL查询出的结果即为用户16501具有查看权限的核算项目数据记录:

SELECT  t1.FItemID  FROM t_Item t1  with(index (uk_Item2)) 

LEFT JOIN t_Organization x2 ON t1.FItemID = x2.FItemID  

Left join Access_t_Organization as Access_t_Organization1 on Access_t_Organization1.FItemID=t1.FItemID

WHERE FItemClassID = 1 --核算项目类别ID

AND t1.FDeleteD=0  --排除掉禁用的核算项目

and ((Substring(Access_t_Organization1.FDataAccessView,14,1) & 16<>0)--过滤出用户16501具有查看权限的记录

or (isnull(t1.FItemID,0)=0)) --没有关联上数据权限表的核算项目默认拥有权限

ORDER BY t1.FNumber

以上示例为怎么查询出用户16501具有核算项目“客户”查看权限的数据

而实际编写直接SQL报表时,可把以上语句中的用户16501,直接替换成当前登录用户的关键字:#GetInnerVariable(UserID)#

另外不同的核算项目,类别ID、核算项目物理表、核算项目数据权限表,需要做相应替换。


【版权声明】:图文转载于网络,版权归原作者所有,仅供学习参考,禁止用于商业用途,如有异议,请留言联系本公众号删除。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
金蝶财务软件使用说明书【转】
公司岗位职责
金蝶K3核算项目余额表存储过程
对不起,您没有访问权限。
SQL 在OPENQUERY中使用参数
金蝶软件核算项目常见问题及数据结构分析
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服