oracle - 最高元素值(value)

标签 oracle plsql oracle-apex

编辑:我可能不清楚我的问题。授权方案应该在登录页面之后离开页面。

我正在创建一个具有自定义身份验证的 Apex 应用程序,我成功创建了登录页面,现在可以设置 session 项值。我制作了一个名为“SESSION_USER_ROLE”的 apex 应用程序项目,并在登录身份验证过程中使用以下方法在 session 状态中设置用户角色:

Apex_Util.Set_Session_State('SESSION_USER_ROLE', v_role);

使用我的用户帐户之一登录并检查 session 应用程序项目后,我可以确认应用程序项目和 session 状态中的项目值和项目名称已正确设置。

但是,当我尝试使用返回 bool 值的 PL/SQL 函数来访问授权方案的“SESSION_USER_ROLE”项的值时,即使我应该得到“true”,我似乎总是得到“false”。这是我一直尝试用于授权目的的 PL/SQL 代码:

    DECLARE
         v_role VARCHAR2(200);
         v_auth boolean;
    BEGIN
         v_role :=  APEX_UTIL.FETCH_APP_ITEM('SESSION_USER_ROLE');
        --This is the value of the SESSION_USER_ROLE for this specific user
         if  v_role  = 'CEO' then 
              v_auth := true;
         else
              v_auth := false;
         end if;
         return v_auth;
    END;

我不明白我在这里做错了什么。这不是检索 SESSION_USER_ROLE 项目值的正确方法吗?

最佳答案

确保在当前身份验证方案的“后身份验证过程名称”属性中引用设置您引用“登录身份验证过程”的应用程序项目的过程。

或者,对应用程序进程使用身份验证后计算点。

Computation point

在新实例上,在用户登录之前还为时过早。

使用 apex_debug.message 添加一些检测,并在 Debug模式下运行该进程。 例如,您可能希望在身份验证过程中记录 v_role 的值,并在授权方案中获取该值后再次记录。

您很可能正确地获取了它,但是它是否具有您期望的值?另一种引用方法是使用绑定(bind)变量语法 :SESSION_USER_ROLE

顺便说一句,通过按权限而不是按业务角色定义授权方案,我取得了更大的可扩展性成功。

关于oracle - 最高元素值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53026917/

相关文章:

oracle-apex - Oracle Apex - 自定义授权方案

oracle - Oracle APEX 中 UTL_HTTP 包的问题

sql - 将 6 个表加入单个查询?

oracle - 计算在特定时间范围内运行的实例数

oracle - 如何在使用 DBMS_SCHEDULER.CREATE_JOB 创建的作业中运行复杂的 PL/SQL 代码

oracle - 如何使用 pl/sql 循环接受用户输入?

database - 甲骨文顶点 : Add custom column into interactive report

oracle - 图片显示在Oracle Apex中崩溃

java - 这个 preparedStatement 我做错了什么?

sql - 如果oracle数据库中的某个表是空表统计的,那么如何恢复该表的原始统计信息呢?