oracle apex自定义授权方案

时间:2017-01-08 17:18:28

标签: oracle plsql oracle-apex

我想在我的应用程序中创建自定义授权方案。 1.Admin 是isStaff 3.是会员

所以我创建了这些方案,我还在APEX_APPLICATION_PRIV(管理员,员工,成员)中创建了三个条目

现在通过访问控制页面,我可以为每个用户授予一个权限,但是如何将每个方案连接到其权限,因此具有授权方案isMember的页面只会出现给拥有该权限的成员?

1 个答案:

答案 0 :(得分:0)

我想我对你为什么不使用你的ACL的默认(管理员,编辑,查看)感到困惑,而不是经历自定义的问题。

您无法像默认的ACL授权方案(管理员,编辑,查看)那样代表您的授权方案(管理员,员工,成员)。管理员 - 管理员,员工 - 编辑和成员 - 查看的位置。似乎痛苦少了很多。

Here is the oracle documentation.

编辑: 这是PL / SQL代码返回一个布尔值,用于默认授权方案' administrator'由ACL创建。

declare
  l_setup_id number;
  l_mode     varchar2(50);
  l_priv     varchar2(50);
begin
  if apex_application.is_custom_auth_page then
    return true;
  end if;

  for c1 in (select id, application_mode
             from apex_access_setup 
             where application_id = :app_id)
  loop
    l_setup_id := c1.id;
    l_mode := c1.application_mode;
  end loop;

  if (l_mode = 'ALL') or (l_mode is null) then
    return true;
  end if;

  for c1 in (select admin_privileges 
             from apex_access_control
             where upper(admin_username) = upper(:app_user)
             and setup_id = l_setup_id)
  loop
    l_priv := c1.admin_privileges;
  end loop;

  if nvl(l_priv,'x') = 'ADMIN' then return true; end if;
  return false;
end;

在你的情况下,我想你可以直接替换“管理员”。与' isAdmin' (或者你在数据库中指定了它)。然后有额外的PL / SQL函数,适当地为工作人员和成员返回true或false。

我相信每个页面/项目只能有一个授权方案,所以请记住这一点。管理员能够访问具有编辑和查看权限的所有用户,默认授权方案可以解决此问题。具有编辑权限的用户可以访问具有查看权限的所有用户。最后,具有查看权限的用户只能访问具有查看权限的页面/项目(或未指定授权方案的页面)。