当用户是多个组的成员时,如何根据用户组过滤APEX网格中的数据?

时间:2019-05-31 15:40:22

标签: sql oracle-apex

我正在尝试根据对一个或多个用户组的分配来过滤APEX报告中的数据。用户组名称在报告中用作变量,可以过滤每一行。

例如使用以下数据:

ID ----------名称---------组 0001约翰·阿德米尔 0002约翰APRC 0024鲍勃ADMR 0011鲍勃·APRC 0045约翰ADMR

分配给组ADMR的用户只能看到组== ADMR的行。 分配给组APRC的用户只能看到组== APRC的行。 既分配给ADMR组又分配给APRC的用户只能看到组== ADMR或组== APRC的行。

会有很多组/组合(不仅是ADMR和APRC),所以我需要一个通用的解决方案。

我已将其设置为根据How can I filter data in an Apex Grid to show certain things for certain user groups?分配给单个组的用户使用。但是,我一直无法弄清楚如何使其适用于多个用户组。

此where子句适用于各个组(从Page designer运行):

((','||apex_util.get_groups_user_belongs_to(:app_user)||',' like '%,ADMR,%'
      and group = 'ADMR')
      or 
(','||apex_util.get_groups_user_belongs_to(:app_user)||',' like '%,APRC,%'
      and group = 'APRC'))

但是,如果将用户分配给两个组,则仅显示ADMR数据。

我认为当用户同时分配给ADMR和APRC组时,一个非通用的解决方案可能看起来像:

(
','||apex_util.get_groups_user_belongs_to(:app_user)||',' like '%,ADMR,%'
      and
','||apex_util.get_groups_user_belongs_to(:app_user)||',' like '%,APRC,%' 
      and 
 (group = 'ADMR' or group = 'APRC')
)      

但是这样做时不会显示任何数据。

在我看来,一般的解决方案将在以下位置使用

group in (','||apex_util.get_groups_user_belongs_to(:app_user)||','))

但是这样做时不会显示任何数据。

要使用,应与

相同
group in ('ADMR','APRC')

没有错误消息。

1 个答案:

答案 0 :(得分:1)

感谢@romeuBraga提供了该框架。以下工作(我必须添加修剪功能)。

  where GROUP in (
    SELECT trim(regexp_substr(','||apex_util.get_groups_user_belongs_to(:APP_USER)||',', '[^,]+', 1, LEVEL)) 
FROM dual
    connect by regexp_substr(
('ADMR, APRC')
, '[^,]+', 1, level) 
is not null 
);