基于hana的BO报表数据权限的控制方法

本文介绍了如何在使用hana数据库的背景下,通过SQL语句和后台控制表来实现BO报表的数据权限控制。具体步骤包括创建后台表记录人员和组织信息,并根据账号所属的最小组织层级来编写SQL逻辑,确保用户只能查看到自己及其下属组织的相关数据。
摘要由CSDN通过智能技术生成

        在任意一个项目,涉及到报表的数据展现时,都得考虑不同的部门及账号等打开报表之后分别能看到什么数据。这就涉及到了报表数据权限的问题。

        常规的,数据权限都会在后台通过写SQL语句进行控制。BO顾问会在后台设计一张专门用于做数据权限的后台表,然后通过围绕这张后台表写SQL做数据权限控制。

如下场景:

        不同账号登录BO后,分别能看到该账号本身所属组织的或其以下组织的数据;

   第一步:后台开发如下后台控制表,列出系统内所有人员及其组织信息。同时,有字段标记该条人员数据的最小组织层级及对应编码。mini_sort,mini_org

        

第二步:通过写SQL 语句实现逻辑控制。代码如下:

           
 /********* Begin Procedure Script ************/ 
 BEGIN 


  declare ini_all integer; --初始值为0 
  
  declare s0 integer; 
  declare s1 integer;
  declare s2 integer;
  declare s3 integer;
  declare s4 integer;
  declare s5 integer;
  declare s6 integer;
  declare s7 integer;
  declare s8 integer;
    
  sort_rs =  select *
             from SAPQ01.zcrmt_016n t16_1
             where mandt = '500';
--             and uname = trim(varuname);
 
  sort_rs1 = select distinct mandt,partner,sort1,sort2,sort3,sort4,sort5,sort6,sort7,sort8,
                            sort11,sort22,sort33,sort44,sort55,sort66,sort77,sort88,sysdat,sysdatend,mini_org
             from SAPQ01.zcrmt_016n t16_3
      where mandt = '500' ;


  select count(*) into s0 from :sort_rs where mini_sort = '' and uname = trim(varuname);
  select count(*) into s1 from :sort_rs where mini_sort = 'SORT1' and uname = trim(varuname);
  select count(*) into s2 from :sort_rs where mini_sort = 'SORT2' and uname = trim(varuname);
  select count(*) into s3 from :sort_rs where mini_sort = 'SORT3' and uname = trim(varuname);
  select count(*) into s4 from :sort_rs where mini_sort = 'SORT4' and uname = trim(varuname);
  select count(*) into s5 from :sort_rs where mini_sort = 'SORT5' and uname = trim(varuname);
  select count(*) into s6 from :sort_rs where mini_sort = 'SORT6' and uname = trim(varuname);  
  select count(*) into s7 from :sort_rs where mini_sort = 'SORT7' and uname = trim(varuname);
  select count(*) into s8 from :sort_rs where mini_sort = 'SORT8' and uname = trim(varuname);  
                                                                                                                                             
if :s0 >= 1 then
  sql_s0 = 
    select
      t16_1.mandt,
      t16_1.uname as "UNAME",
      --t16_1.partner,
 t16_1_1.partner,
 t16_1_1.sort1,
 t16_1_1.sort2,
 t16_1_1.sort3,
 t16_1_1.sort4,
 t16_1_1.sort5,
 t16_1_1.sort6,
 t16_1_1.sort7,
 t16_1_1.sort8,
 t16_1_1.SORT11,
 t16_1_1.SORT22,
 t16_1_1.SORT33,
 t16_1_1.SORT44,
 t16_1_1.sort55,
 t16_1_1.sort66,
 t16_1_1.sort77,
 t16_1_1.sort88,
 t16_1_1.sysdat,
 t16_1_1.sysdatend,
 t16_1_1.mini_org
from :sort_rs t16_1  

left outer join :sort_rs1 t16_1_1 
            on  (t16_1_1.mandt = t16_1.mandt)
    where t16_1.mandt = '500' and t16_1.uname = trim(varuname);            
end if;

if :s1 >= 1 then
  sql_s1 = 
    select
      t16_1.mandt,
      t16_1.uname as "UNAME",
      --t16_1.partner,
      t16_1_1.partner,
 t16_1_1.sort1,
 t16_1_1.sort2,
 t16_1_1.sort3,
 t16_1_1.sort4,
 t16_1_1.sort5,
<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值