带条件的 Oracle APEX 卡模板

问题描述 投票:0回答:1

我用卡片模板构建了一些操作菜单(基于经典报告)。我使用 3 张卡将用户重定向到应用程序中的其他页面。可以为这张卡配置一些条件吗?我需要类似的授权方案解决方案,其中一些用户只能看到两张卡,而一些具有其他授权级别的用户可以看到第三张卡。

我尝试使用授权架构,就像在经典报告中一样,但它不起作用。

报表查询基于简单的sql:

select '' as CARD_TITLE
      , '' as CARD_INITIALS
      , '' as CARD_LINK
      , 1 as ORDER_
from TABEL_A
union all
select '' as CARD_TITLE
      , '' as CARD_INITIALS
      , '' as CARD_LINK
      , 2 as ORDER_
from TABEL_A
union all
select '' as CARD_TITLE
      , '' as CARD_INITIALS
      , '' as CARD_LINK
      , 3 as ORDER_
from TABEL_A
ORDER BY ORDER_;

APEX 19.1

oracle-apex
1个回答
0
投票

APEX 中的授权方案是一个根据用户权限启用/禁用其他组件(页面/区域/按钮/项目/列/等...)的组件。它们不适合条带化数据,但您可以通过使用基于授权方案的返回值的页面或应用程序项来使用解决方法。

EMP/DEPT 表上的示例。用例是具有“管理员”权限的用户可以看到所有行,其他用户只能看到

JOB = 'CLERK'
的行。

  • 创建一个页面项来保存身份验证方案的值。让我们使用 P1_IS_ADMINISTRATOR。
  • 向此类型为“Function Body”的页面项添加一个 before header 计算,其源为:
IF apex_authorization.is_authorized('Administrator') THEN
  RETURN 'YES';
ELSE
  RETURN 'No';
END IF;
  • 修改报告的where子句:
SELECT * 
  FROM emp 
 WHERE :P1_IS_ADMINISTRATOR = 'YES' OR
       job = 'CLERK'

此技术的另一个用途是有条件地显示列值。如果管理员权限的用户可以看到所有人的工资,而其他用户只能看到职位为“CLERK”的用户的工资,那么可以通过在 select 子句中使用该页面项来解决

SELECT empno
      ,ename
      ,job
      ,mgr
      ,hiredate
      ,CASE WHEN JOB = 'CLERK' THEN TO_CHAR(sal)
            WHEN :P1_IS_ADMINISTRATOR = 'YES' THEN TO_CHAR(sal)
            ELSE 'above your paygrade'
            END as sal
      ,comm
      ,deptno
  FROM emp;
  • 请注意,在报告中完成此操作时,需要将 P1_IS_ADMINISTRATOR 设置为属性“要提交的项目”
  • 如果您计划在多个页面中使用此技术,则使用应用程序项和应用程序计算而不是页面项和页面计算可能会很有用。在这种情况下,请确保计算的处理点位于授权的处理点之后,以避免出现不需要的结果。
© www.soinside.com 2019 - 2024. All rights reserved.