最高项目价值

时间:2018-10-27 22:44:24

标签: oracle plsql oracle-apex

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

我正在使用自定义身份验证创建一个Apex应用程序,我成功进入了登录页面,现在能够设置会话项的值。我创建了一个名为“ SESSION_USER_ROLE”的顶点应用程序项目,并在我的登录身份验证过程中,使用以下命令将用户角色设置为会话状态:

Apex_Util.Set_Session_State('SESSION_USER_ROLE', v_role);

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

但是,当我尝试使用返回布尔值的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的项目值的正确方法吗?

1 个答案:

答案 0 :(得分:2)

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

或者,将“认证后”计算点用于应用程序进程。

Computation point

在新实例上,此人登录还为时过早。

使用apex_debug.message添加一些检测,并以调试模式运行该过程。 例如,您可能希望在认证过程中以及在授权方案中提取v_role的值后再次记录它。

您可能正确地获取了它,但是它具有您所期望的价值吗?另一种参考方法是使用绑定变量语法:SESSION_USER_ROLE

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