0

绑定变量 :app_region_id 适用于区域,但不适用于授权方案

区域 SQL 语句

SELECT  WORKSPACE,APPLICATION_ID , PAGE_ID, REGION_ID, REGION_NAME,AUTHORIZATION_SCHEME, :app_region_id
from apex_application_page_regions 
where region_id = :app_region_id

授权方案
方案类型:存在 SQL 查询
SQL 查询:

Select  1
from apex_application_page_regions 
where region_id = :app_region_id; 

我应该使用哪个绑定变量来实现区域授权。我想要实现的代码,它没有返回想要的结果

Select 1
    from AD_GRP_APEX_REGION_ASSOC r,
       AD_GRP_EMP e
    where  e.ad_grp = r.ad_grp
    and e.user_id =  :app_user
    and r.region_id = :app_region_id
4

1 回答 1

0

该变量:app_region_id不是一个全局变量,其方式与:APP_USER. 授权模式仅适用于与 SESSION 相关联的全局变量,而不适用于页面中的元素(例如区域)。除此之外,拥有它没有任何意义,因为您使用 AUTHORIZATION SCHEMAS 来限制对应用程序中不同组件的访问。让我展示如何将授权模式应用于 Oracle Apex 中的区域。

假设我有一个包含三个区域的测试应用程序:

  • 区域 1 显示查询的一个字段(一行)
  • 区域 2 显示查询的另一个字段(一行)
  • 区域 3 仅显示一条消息(静态内容)

没有任何身份验证模式,它显示了这个

在此处输入图像描述

现在,让我们创建一个授权模式示例,该示例派生谁是用户,并基于此将仅显示区域 3。在我的情况下,我的应用程序默认使用身份验证模式(顶点用户),因此登录的用户始终分配给全局变量:APP_USER.

应用程序生成器 --> 共享组件 --> 授权模式

Authorization Schema --> MY_TEST
Type --> Exist SQL QUERY 

select 1 from dual where exists  ( select user_name from apex_workspace_apex_users where workspace_name = 'MY_WORKSPACE' and user_name = upper(':APP_USER') )

当用户存在时,此授权模式将禁止查看区域,所以基本上对每个人来说,显然我这样做只是为了测试目的。

然后我修改了 REGION 1 和 REGION 2 的属性,将授权模式更改为 MY_TEST

在此处输入图像描述

现在,当我执行应用程序时,我只能在页面中看到 region3。

在此处输入图像描述

于 2020-07-30T16:01:26.850 回答