Oracle apex oracle apex中页面的自定义授权

Oracle apex oracle apex中页面的自定义授权,oracle-apex,Oracle Apex,如何为页面创建授权架构 例如:我有 像page1、page2、page3和page4这样带有 用户为user1、user2、user3和user4 当我登录时 user1应仅获取第1页和第4页 用户2-->第2页和第3页 用户3-->第1页和第3页 用户4-->第2页和第4页 即在priv表中存储页码和用户。布尔返回值函数对组件有效,但对页面显示错误 如何为上述角色编写授权架构?1-转到共享组件 2-点击授权方案 3-创建“PL/SQL函数返回布尔值”类型的新方案 4-函数应返回“fal

如何为页面创建授权架构

例如:我有

  • page1
    page2
    page3
    page4
    这样带有
  • 用户为
    user1
    user2
    user3
    user4
当我登录时

  • user1应仅获取第1页和第4页
  • 用户2-->第2页和第3页
  • 用户3-->第1页和第3页
  • 用户4-->第2页和第4页
即在
priv
表中存储页码和用户。布尔返回值函数对组件有效,但对页面显示错误


如何为上述角色编写授权架构?

1-转到共享组件

2-点击授权方案

3-创建“PL/SQL函数返回布尔值”类型的新方案

4-函数应返回“false”以拒绝访问

在这个pl/sql代码中,您可以访问:APP_用户变量和:APP_PAGE_ID(页码)

如果您有一个函数接收用户和页面,并返回一个布尔值检查他是否具有访问权限,那么只需执行以下操作:

BEGIN
   RETURN MYFUNCTION(:APP_USER, :APP_PAGE_ID);
END;
5-转到“编辑应用程序属性”>“安全性”并选择您的 授权方案

6-您不需要为每个页面设置授权方案,只需执行步骤5即可


我不知道你的桌子怎么样了。但是假设它有两列

USER       PAGE_NUMBER
user1       1
user1       4
user2       2
user2       3
user3       1
user3       3
user4       2
user4       4
因此,您的函数如下所示:

CREATE OR REPLACE FUNCTION "MYFUNCTION" (p_user IN VARCHAR2, p_page_number IN NUMBER) 
RETURN BOOLEAN AS

v_count NUMBER := 0;

BEGIN

SELECT count(*) INTO v_count
FROM mytable 
WHERE user = p_user AND page_number = p_page_number;

IF v_count = 0 THEN
   RETURN false;
END IF;

RETURN true;

END;

1-转到共享组件

2-点击授权方案

3-创建“PL/SQL函数返回布尔值”类型的新方案

4-函数应返回“false”以拒绝访问

在这个pl/sql代码中,您可以访问:APP_用户变量和:APP_PAGE_ID(页码)

如果您有一个函数接收用户和页面,并返回一个布尔值检查他是否具有访问权限,那么只需执行以下操作:

BEGIN
   RETURN MYFUNCTION(:APP_USER, :APP_PAGE_ID);
END;
5-转到“编辑应用程序属性”>“安全性”并选择您的 授权方案

6-您不需要为每个页面设置授权方案,只需执行步骤5即可


我不知道你的桌子怎么样了。但是假设它有两列

USER       PAGE_NUMBER
user1       1
user1       4
user2       2
user2       3
user3       1
user3       3
user4       2
user4       4
因此,您的函数如下所示:

CREATE OR REPLACE FUNCTION "MYFUNCTION" (p_user IN VARCHAR2, p_page_number IN NUMBER) 
RETURN BOOLEAN AS

v_count NUMBER := 0;

BEGIN

SELECT count(*) INTO v_count
FROM mytable 
WHERE user = p_user AND page_number = p_page_number;

IF v_count = 0 THEN
   RETURN false;
END IF;

RETURN true;

END;

如果我们将组件id与页面id一起保存并检查组件,则上面带有返回布尔函数的授权模式适用于组件

但是对于页面授权,它不工作并且显示错误。 使用上表的结构和功能进行测试


如果我们将组件id与页面id一起保存并检查组件,则上述带有返回布尔函数的授权模式适用于组件

但是对于页面授权,它不工作并且显示错误。 使用上表的结构和功能进行测试


< P>您应该考虑自定义授权方案和认证方案..

1-为用户创建一个表来存储每个用户名和密码,并为“user_type”列一列,在该列中,您将拥有您拥有的用户类型,例如:开发者为“dev”,管理员为“adm”,等等

2-创建一个plsql函数,该函数根据 将从用户处获得的用户名和密码与存储在用户表中的用户名和密码进行比较的查询。 此函数还将设置“会话变量”以传递用户名和 成功登录后的用户类型,如:

apex_util.set_session_state('SESSION_U_TYPE',temp_type);

apex_util.set_session_state('SESSION_USER_NAME',in_username); 
SELECT * FROM my_users 
WHERE user_name = :SESSION_USER_NAME AND user_type = 'dev';
3-在应用程序的共享组件上,使用与您在功能中使用的完全相同的名称创建“应用程序项”(此处为会话类型、会话用户名)

4-编辑“登录”页面,删除或注释掉默认代码,使用您的函数并通过绑定变量传递用户名和密码

5-现在再次转到共享组件并创建自定义授权方案,为其命名并选择“SQL exist”作为类型,然后编写SQL 查询以检查当前用户的用户类型,如:

apex_util.set_session_state('SESSION_U_TYPE',temp_type);

apex_util.set_session_state('SESSION_USER_NAME',in_username); 
SELECT * FROM my_users 
WHERE user_name = :SESSION_USER_NAME AND user_type = 'dev';
重复此步骤以创建所需的“访问级别”

6-最后,转到每一页,在“安全性”部分下选择 方案或要允许访问此页面的用户级别

--注:

    • 这是一个快速的解决方案(但运行良好),您可以对其进行许多改进,例如,您应该创建一个过程来处理登录并将参数传递给身份验证函数
    • 你必须散列密码,因为你不应该存储在纯文本密码

我希望这是有用的,

你应该考虑一个定制的授权方案和认证方案…

1-为用户创建一个表来存储每个用户名和密码,并为“user_type”列一列,在该列中,您将拥有您拥有的用户类型,例如:开发者为“dev”,管理员为“adm”,等等

2-创建一个plsql函数,该函数根据 将从用户处获得的用户名和密码与存储在用户表中的用户名和密码进行比较的查询。 此函数还将设置“会话变量”以传递用户名和 成功登录后的用户类型,如:

apex_util.set_session_state('SESSION_U_TYPE',temp_type);

apex_util.set_session_state('SESSION_USER_NAME',in_username); 
SELECT * FROM my_users 
WHERE user_name = :SESSION_USER_NAME AND user_type = 'dev';
3-在应用程序的共享组件上,使用与您在功能中使用的完全相同的名称创建“应用程序项”(此处为会话类型、会话用户名)

4-编辑“登录”页面,删除或注释掉默认代码,使用您的函数并通过绑定变量传递用户名和密码

5-现在再次转到共享组件并创建自定义授权方案,为其命名并选择“SQL exist”作为类型,然后编写SQL 查询以检查当前用户的用户类型,如:

apex_util.set_session_state('SESSION_U_TYPE',temp_type);

apex_util.set_session_state('SESSION_USER_NAME',in_username); 
SELECT * FROM my_users 
WHERE user_name = :SESSION_USER_NAME AND user_type = 'dev';
重复此步骤以创建所需的“访问级别”

6-最后,进入每一页并在“安全”下