编辑:我可能不清楚我的问题。授权方案应该在登录页面之后离开页面。
我正在创建一个具有自定义身份验证的 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 项目值的正确方法吗?
最佳答案
确保在当前身份验证方案的“后身份验证过程名称”属性中引用设置您引用“登录身份验证过程”的应用程序项目的过程。
或者,对应用程序进程使用身份验证后计算点。
在新实例上,在用户登录之前还为时过早。
使用 apex_debug.message 添加一些检测,并在 Debug模式下运行该进程。
例如,您可能希望在身份验证过程中记录 v_role
的值,并在授权方案中获取该值后再次记录。
您很可能正确地获取了它,但是它是否具有您期望的值?另一种引用方法是使用绑定(bind)变量语法 :SESSION_USER_ROLE
顺便说一句,通过按权限而不是按业务角色定义授权方案,我取得了更大的可扩展性成功。
关于oracle - 最高元素值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53026917/