我目前正在使用Oracle Apex版本5.1,我正在尝试根据应用程序中第31页的文本字段页面项的值设置授权方案,以及其他因素,但我是没有任何成功。
我根据一个名为NAVIGATION的表中的SQL查询创建了一个动态列表。然后我使用此列表作为我的"导航菜单"在我的申请中。我以这样的方式设置列表的查询:如果我单击导航菜单选项卡将我引导到应用程序中的第31页,则有问题的文本字段页面项的值将自动推送到该文本字段。但是,我还设置了列表的查询,导航菜单中的多个选项卡实际上将用户引导到第31页,但推送到文本字段页面项的值取决于导航菜单选项卡,即点击。换句话说,该文本字段页面项可以包含不同的值,具体取决于单击导航菜单中的哪个选项卡。我这样设置的原因是因为第31页显示了不同的内容,具体取决于该文本字段中的值。这一切都很完美。但是,我希望在该页面上显示的内容取决于用户是谁,这使我遇到了授权方案的问题。
现在,我想为第31页设置一个依赖于该文本字段页面项的授权方案,以及依赖于我的一个名为TEAMMEMBERS的表中的特定数据。 TEAMMEMBERS有一个名为"用户名"和一个名为" P31_Access"的列。列"用户名"包含进入应用程序的人员用户名。 " P31_Acess"包含可以推送到第31页上的该文本字段的不同值。所以基本上我想要的是,如果我单击导航菜单中的一个选项卡将我带到第31页,我希望应用程序查看我的TEAMMEMBERS表,在"用户名"中找到我的用户名列,然后查看" P31_Access"中的值列中的同一行。如果" P31_Access"中的值在该行中是与第31页上的文本字段页面项相同的值,我被允许访问。否则,不授予访问权限。
我知道这似乎是一种处理访问的奇怪方式,但是为页面上的各个组件设置授权方案对我的具体情况和需求不起作用。
这是我到目前为止所做的,但它不会产生我想要的结果。
SELECT 1
FROM TEAMMEMBERS
WHERE P31_ACCESS = :P31_ACCESS
AND upper(username) = upper(:APP_USER);
我确定我的查询存在许多问题,但我还不确定如何编写它。有没有人有任何想法?我想知道返回布尔值的PLSQL是否会更好地设置此授权方案,但我不确定。
提前谢谢。
答案 0 :(得分:1)
我的第一个猜测是P31_ACCESS未在会话状态中设置。由于您运行的流程不在您的页面上,因此需要在服务器上进行设置,并且需要在页面生成过程中尽早设置。所以你可能需要在Before Header步骤中设置一个Computation来设置它的值。
确保您的授权过程不是每个会话一次。您可能需要每页一次查看。
根据您的描述,听起来您也希望您的查询是这样,并确保它是Exists SQL Query类型:
SELECT 1
FROM TEAMMEMBERS
WHERE ( P31_ACCESS = :P31_ACCESS OR P31_ACCESS IS NULL )
AND upper(username) = upper(:APP_USER);