gre*_*reg 2 oracle oracle-apex oracle-apex-5
我目前正在构建一个招聘应用程序来替换当前正在使用的应用程序。
我希望能够设置用户根据登录看到的第一页。我目前正在使用 Application Express 身份验证,但我也有一个包含办公室、用户名和用户类型的登录表,因此当用户名在 :APP_USER. 匹配登录表中的用户名,它将拉取用户类型。
因此,如果招聘人员登录,我希望他们转到第 1 页,这是一个招聘仪表板,但如果销售人员登录,我希望他们转到第 20 页,这是一个销售仪表板。
我怎样才能做到这一点?
提前致谢!
就个人而言,我不喜欢改变登录机制。我当然不喜欢在用户实际验证之前根据用户名执行代码。@trent 的例子还不是那么简单,因为它没有实际的选择,但我看到人们根据用户名执行选择以检索一些默认值或设置,只是为了能够调整p_app_page参数。
除非您禁用了深层链接,否则这些参数不会总是重定向到您想要的页面。启用深层链接后,用户将始终转到他请求的页面,而不是p_app_page. 由您决定应用程序的行为方式。尊重深层链接还是总是重定向到某个页面?
我个人更喜欢将重定向放在身份验证方案的后身份验证中。在我看来,获取或设置用户设置在登录页面过程和身份验证代码中都没有位置(它旨在进行身份验证,而不是操作)。
在 post-auth 代码中,我将 select 放在 type 和 alter 上FSP_AFTER_LOGIN_URL。请注意,这将完全忽略深层链接。您可以ELSE省略,但这只会保留非销售人员和招聘人员的深层链接,因为他们将始终登陆他们的仪表板页面。
DECLARE
l_type persons.person_type%TYPE;
l_url VARCHAR2(4000);
BEGIN
SELECT person_type
INTO l_type
FROM persons
WHERE username = :P101_USERNAME;
l_url :=
CASE l_type
WHEN 'SALES' THEN
'f?p=' || V('APP_ALIAS') || ':SALES_DASH:' || V('APP_SESSION')
WHEN 'RECRUITER' THEN
'f?p=' || V('APP_ALIAS') || ':RECRUITER_DASH:' || V('APP_SESSION')
ELSE -- go to home page
'f?p=' || V('APP_ALIAS') || ':HOME:' || V('APP_SESSION')
END;
APEX_UTIL.SET_SESSION_STATE('FSP_AFTER_LOGIN_URL', l_url);
END;
Run Code Online (Sandbox Code Playgroud)