You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于授权方案和角色限制Oracle Apex IG数据

Oracle Apex 交互式网格(IG)行级数据权限实现方案

核心思路

通过授权方案判断用户权限,结合服务器端数据过滤,实现不同授权组用户仅能查看对应部门的员工数据,全程依赖服务器端逻辑确保安全性,避免客户端篡改风险。

具体实现步骤

1. 基于授权方案匹配权限对应的部门

利用Apex内置的APEX_AUTHORIZATION.IS_AUTHORIZED函数,直接在数据源或页面项中判断当前用户所属的授权方案,映射到对应的部门值:

  • 若用户属于USER_SALES_MANAGER授权方案,对应部门为Sales
  • 若用户属于USER_MARKETING_MANAGER授权方案,对应部门为Marketing

2. 方式一:直接在IG数据源中添加过滤逻辑

编辑交互式网格的数据源(SQL查询),在WHERE子句中加入权限过滤:

SELECT emp_id, emp_name, department, hire_date, salary
FROM employees
WHERE department = CASE
  WHEN APEX_AUTHORIZATION.IS_AUTHORIZED('USER_SALES_MANAGER') THEN 'Sales'
  WHEN APEX_AUTHORIZATION.IS_AUTHORIZED('USER_MARKETING_MANAGER') THEN 'Marketing'
  ELSE NULL -- 无对应权限的用户将看不到任何数据
END
  • 若需要给管理员开放全部数据权限,可扩展WHERE条件:
    WHERE (department = CASE
      WHEN APEX_AUTHORIZATION.IS_AUTHORIZED('USER_SALES_MANAGER') THEN 'Sales'
      WHEN APEX_AUTHORIZATION.IS_AUTHORIZED('USER_MARKETING_MANAGER') THEN 'Marketing'
      ELSE NULL
    END) OR APEX_AUTHORIZATION.IS_AUTHORIZED('ADMIN_AUTH_SCHEME')
    

3. 方式二:通过页面中转项实现过滤(适合复杂场景)

如果需要在多个组件中复用权限部门值,可创建隐藏页面项:

  • 创建页面项PXX_ALLOWED_DEPARTMENT(XX为当前页面编号),设置来源类型为「PL/SQL表达式」,计算时机为「页面加载时」,表达式内容:
    CASE
      WHEN APEX_AUTHORIZATION.IS_AUTHORIZED('USER_SALES_MANAGER') THEN 'Sales'
      WHEN APEX_AUTHORIZATION.IS_AUTHORIZED('USER_MARKETING_MANAGER') THEN 'Marketing'
      ELSE NULL
    END
    
  • 编辑IG的数据源,添加WHERE条件:
    SELECT emp_id, emp_name, department, hire_date, salary
    FROM employees
    WHERE department = :PXX_ALLOWED_DEPARTMENT
    

4. 安全验证要点

  • 必须使用服务器端过滤:绝对不能仅依赖客户端(如IG的前端过滤),防止用户通过浏览器调试工具篡改参数绕过权限。
  • 强化授权方案逻辑:确保USER_SALES_MANAGER和USER_MARKETING_MANAGER的授权方案仅对对应角色/用户生效,比如授权方案的逻辑设置为USER_IN_ROLE('SALES_MANAGER')(绑定对应数据库角色)。
  • 测试覆盖场景:分别用销售经理、营销经理、无权限用户登录系统,验证IG的数据展示是否符合预期。

内容的提问来源于stack exchange,提问作者Velocity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:03:24