oracle apex

时间:2018-03-17 23:06:32

标签: oracle-apex

如何为页面创建授权架构?

例如:我有

  • 此类网页,例如page1page2page3page4
  • 用户为user1user2user3user4

登录时

  • user1应该只获得page1和page4
  • user2 - >第2页和第3页
  • user3 - >第1页和第3页
  • user4 - >第2页和第4页

即在priv表中存储页码和用户。布尔返回值函数适用于组件,但对于页面,它显示错误。

如何为上述角色编写授权模式?

3 个答案:

答案 0 :(得分:3)

1 - 转到共享组件

2 - 点击授权方案

3 - 创建一个类型" PL / SQL函数的新方案,返回布尔值"

4 - 你的功能应该返回" false"拒绝访问

在此pl / sql代码中,您可以访问:APP_USER变量和:APP_PAGE_ID(页码)。

如果你有一个接收用户和页面的函数并返回一个布尔检查他是否有访问权限,那么就这样做:

app.pool.apply_async(exporter, args=(domains), error_callback=error_hander)

5 - 转到"编辑应用程序属性" > "安全"并选择你的 授权方案。

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

enter image description here

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

BEGIN
   RETURN MYFUNCTION(:APP_USER, :APP_PAGE_ID);
END;

所以你的功能看起来像这样:

USER       PAGE_NUMBER
user1       1
user1       4
user2       2
user2       3
user3       1
user3       3
user4       2
user4       4

答案 1 :(得分:0)

您应该考虑自定义授权方案和身份验证方案..

1-为用户创建一个表格,用于存储每个用户名和密码,并为“用户类型”列添加一列,在此列中,您将拥有自己拥有的用户类型,例如:&#39 ; dev的'对于开发者和' adm'对于管理员等等...

2-创建一个plsql函数,该函数返回基于的布尔值(true / false) 一个查询,用于将用户从用户获得的用户名和密码与存储在users表中的用户名和密码进行比较。 此功能还将设置会话变量'传递user_name和 登录成功后的user_type,如:

apex_util.set_session_state('SESSION_U_TYPE',temp_type);

apex_util.set_session_state('SESSION_USER_NAME',in_username); 

3-在应用程序的共享组件上创建“应用程序项”'您在函数中使用的相同名称(此处为SESSION_U_TYPE,SESSION_USER_NAME)

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

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

SELECT * FROM my_users 
WHERE user_name = :SESSION_USER_NAME AND user_type = 'dev';

重复此步骤以创建尽可能多的访问级别'如你所愿

6-最后,转到每个页面并在安全部分下选择 方案或您希望允许访问此页面的用户级别

- 注意:

    • 这是快速解决方案(但工作正常),您可以添加许多改进,例如您应该创建一个程序来处理登录并将参数传递给身份验证功能
    • 你必须要记住密码,因为你不应该在平原文本中存储密码!

我希望这很有用

答案 2 :(得分:-1)

如果我们将组件ID与页面ID一起保存并检查组件

,那么带有返回布尔函数的上述授权模式适用于组件

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

enter image description here