我目前正在构建一个招聘应用程序,以取代目前正在使用的应用程序。
我希望能够根据登录设置用户看到的第一页。我目前正在使用Application身份验证,但我也有一个登录表,其中包含office、用户名和用户类型,所以当用户名在:APP_USER中时。与登录表中的用户名匹配,它将提取用户类型。
因此,如果招聘人员登录,我希望他们进入第1页,即招聘仪表板,但如果销售人员登录,我希望他们进入第20页,这是一个销售仪表板。
我怎样才能做到这一点?
提前感谢!
发布于 2016-09-27 07:01:48
就我个人而言,我不喜欢改变登录机制。我当然不喜欢在用户真正通过身份验证之前根据用户名执行代码。@trent的例子并不完全是这样,因为它没有实际的选择,但我看到人们根据用户名执行选择,以检索一些默认值或设置,但只能调整p_app_page参数。
这些参数--不一定总是重定向到您想要的页面--除非您已经禁用了深度链接。启用深度链接后,用户将始终转到他所请求的页面,而不是p_app_page中提供的页面。应该由您来决定应用程序的行为方式。尊重深度链接还是总是重定向到某个页面?
就我个人而言,我更喜欢将重定向放在认证方案的后认证中。在我看来,获取或设置用户设置在登录页面进程中没有位置,在身份验证代码中也没有位置(它用于身份验证,而不是操作)。
在后期代码中,我会将select放在类型上并修改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;发布于 2016-09-27 00:47:53
几个方法。
如果已禁用深度链接(始终转到特定页面),则可以创建一个前置标头进程来应用重定向(url或url)。
我看到的其他示例通常涉及清除会话项FSP_AFTER_LOGIN_URL,然后使用apex_custom_auth.login (在登录页面过程中),如下所示:
declare
l_to_page_num NUMBER;
begin
if upper(:P101_USERNAME) = 'TRENT'
then
l_to_page_num := 2;
else
l_to_page_num := 1;
end if;
apex_util.set_session_State ('FSP_AFTER_LOGIN_URL', NULL);
apex_custom_auth.login(
p_uname => :P101_USERNAME,
p_password => :P101_PASSWORD,
p_app_page => :APP_ID || ':' || l_to_page_num);
end;发布于 2016-09-27 05:42:15
我个人喜欢在主页中使用加载的分支,这些分支可以在适当的情况下订购,并附带相关的授权方案或条件。
https://stackoverflow.com/questions/39666047
复制相似问题