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

如何在Oracle Apex中基于用户角色实现自定义访问权限控制

Oracle APEX 角色自定义授权功能实现步骤

1. 提前准备权限存储表

首先创建一张表存储角色和表单的权限映射关系,示例表结构:

CREATE TABLE ROLE_PERMISSIONS (
    PERM_ID NUMBER PRIMARY KEY,
    ROLE_NAME VARCHAR2(50) NOT NULL, -- 角色值,如MANAGER/EMPLOYEE
    FORM_CODE VARCHAR2(100) NOT NULL, -- 表单唯一标识,和页面别名一一对应
    ACCESS_ALLOWED CHAR(1) CHECK (ACCESS_ALLOWED IN ('Y','N')),
    UPDATE_BY VARCHAR2(100),
    UPDATE_TIME DATE DEFAULT SYSDATE
);
-- 建议加联合唯一约束,避免同一个角色同个表单重复配置
CREATE UNIQUE INDEX UK_ROLE_FORM ON ROLE_PERMISSIONS(ROLE_NAME, FORM_CODE);

2. 实现保存按钮功能

你当前的配置页复选框勾选后,按以下逻辑配置保存动作:

  • 给每个复选框的返回值设为Y,未选中默认返回N,每个复选框对应一个FORM_CODE
  • 给保存按钮绑定提交页面动作,新增一个PL/SQL类型的页面进程,代码示例:
-- 先清空当前选中角色的旧权限配置,避免重复数据
DELETE FROM ROLE_PERMISSIONS WHERE ROLE_NAME = :PXX_SELECTED_ROLE;

-- 依次写入勾选的权限,PXX为你的页面编号,替换为实际页面项名
IF :PXX_FORM_ORDER = 'Y' THEN
  INSERT INTO ROLE_PERMISSIONS(PERM_ID, ROLE_NAME, FORM_CODE, ACCESS_ALLOWED)
  VALUES(SEQ_PERM_ID.NEXTVAL, :PXX_SELECTED_ROLE, 'FORM_ORDER', 'Y');
END IF;

IF :PXX_FORM_LEAVE = 'Y' THEN
  INSERT INTO ROLE_PERMISSIONS(PERM_ID, ROLE_NAME, FORM_CODE, ACCESS_ALLOWED)
  VALUES(SEQ_PERM_ID.NEXTVAL, :PXX_SELECTED_ROLE, 'FORM_LEAVE', 'Y');
END IF;

-- 其他表单权限按上述逻辑依次添加即可
COMMIT;
  • 保存成功后可以加一个成功提示的动态动作,提升交互体验

3. 新建全局授权方案

这一步是控制用户访问表单的核心逻辑:

  • 进入共享组件→授权方案→新建,类型选择「PL/SQL函数返回布尔值」
  • 编写权限校验逻辑,示例代码:
DECLARE
    v_has_access CHAR(1);
BEGIN
    -- 查询当前登录用户的角色是否有当前页面的访问权限
    SELECT ACCESS_ALLOWED INTO v_has_access
    FROM ROLE_PERMISSIONS
    WHERE ROLE_NAME = :G_USER_ROLE -- 替换为你存储当前登录用户角色的应用级项
    AND FORM_CODE = :APP_PAGE_ALIAS -- 每个表单页面设置唯一别名,和FORM_CODE保持一致
    AND ROWNUM = 1;

    RETURN v_has_access = 'Y';
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        RETURN FALSE; -- 未配置权限默认禁止访问
END;
  • 授权方案的「未授权时的提示信息」可以自定义为「您暂无当前页面的访问权限」

4. 绑定授权到对应表单

  • 打开每个需要做权限控制的表单页面,在页面属性的「安全」分类下,选择刚才新建的授权方案即可
  • 可选优化:给导航菜单的对应菜单项也绑定同一个授权方案,无权限的用户看不到对应菜单入口,体验更友好

你配置的自定义访问表单界面参考:
自定义访问表单界面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:36:03