Oracle APEX 19.1:经典报表卡片模板如何配置权限显示条件?
解决APEX 19.1经典报表卡片菜单的行级权限控制问题
经典报表的全局授权方案仅控制整个报表是否可见,无法实现单条卡片(行)的权限过滤。以下是两种有效解决方法:
方法一:在SQL查询中直接加入权限过滤逻辑
通过APEX内置变量和角色判断,让第三张卡片仅对高权限用户返回。示例SQL如下(替换实际角色名、卡片内容和跳转链接):
select '数据查询' as CARD_TITLE , 'DQ' as CARD_INITIALS , 'f?p=&APP_ID.:10:&APP_SESSION.::NO:::' as CARD_LINK , 1 as ORDER_ from TABLE_A union all select '报表导出' as CARD_TITLE , 'RE' as CARD_INITIALS , 'f?p=&APP_ID.:20:&APP_SESSION.::NO:::' as CARD_LINK , 2 as ORDER_ from TABLE_A union all select '系统配置' as CARD_TITLE , 'SC' as CARD_INITIALS , 'f?p=&APP_ID.:30:&APP_SESSION.::NO:::' as CARD_LINK , 3 as ORDER_ from TABLE_A -- 仅当当前用户拥有指定高权限角色时返回第三张卡片 where APEX_UTIL.HAVE_ROLE('ADMIN_ROLE') ORDER BY ORDER_;
- 若
TABLE_A可能为空,可替换为dual(如from dual where 1=1)保证卡片始终生成 APEX_UTIL.HAVE_ROLE('角色名')用于判断用户是否拥有目标角色,也可根据用户表的权限字段调整条件(如where exists (select 1 from USER_TABLE where USER_ID = V('APP_USER') and IS_ADMIN = 'Y'))
方法二:通过报表行条件控制显示
- 保持原SQL结构不变,确保
ORDER_字段正确标识卡片序号 - 进入经典报表的属性面板,找到行条件设置:
- 类型选择「PL/SQL表达式」
- 表达式填写:
(:ORDER_ != 3) OR APEX_UTIL.HAVE_ROLE('ADMIN_ROLE')
- 保存后,仅高权限用户能看到
ORDER_=3的第三张卡片
补充说明
- 若已存在APEX授权方案,可将表达式中的
APEX_UTIL.HAVE_ROLE替换为APEX_AUTHORIZATION.IS_AUTHORIZED('你的授权方案名') - 卡片跳转链接需遵循APEX标准格式:
f?p=&APP_ID.:目标页面ID:&APP_SESSION.::NO:::,确保正确跳转至应用内页面
内容的提问来源于stack exchange,提问作者pit3k
相关产品推荐
相关产品推荐

