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

如何配置用户可见导航菜单项?基于apex_application_list_entries求助

实现APEX用户创建页面关联导航菜单权限的方案

1. 创建自定义权限存储表

首先需要一张表来存储用户与可访问导航菜单项的关联关系——apex_application_list_entries是系统视图,仅存储菜单项定义,不保存用户权限数据:

CREATE TABLE USER_MENU_PERMISSIONS (
    USER_ID VARCHAR2(100) NOT NULL, -- 关联APEX用户的USER_NAME或ID
    LIST_ENTRY_ID NUMBER NOT NULL, -- 关联apex_application_list_entries的LIST_ENTRY_ID
    CONSTRAINT UMP_PK PRIMARY KEY (USER_ID, LIST_ENTRY_ID),
    CONSTRAINT UMP_FK_LIST_ENTRY FOREIGN KEY (LIST_ENTRY_ID) 
        REFERENCES APEX_APPLICATION_LIST_ENTRIES (LIST_ENTRY_ID)
);

2. 在用户创建页面添加多选列表项

在用户创建页面新增一个**Select List(Multiple)**类型的页面项,配置如下:

  • Name:比如PXX_SELECTED_MENU_ITEMS(XX替换为你的页面编号)
  • Type:Select List(Multiple)
  • List of Values > SQL Query:查询当前应用的所有导航菜单项,替换YOUR_NAV_LIST_NAME为你的导航菜单名称(可在APEX应用的「Shared Components > Lists」中找到):
SELECT entry_text AS display_value, list_entry_id AS return_value
FROM apex_application_list_entries
WHERE application_id = :APP_ID
  AND list_name = 'YOUR_NAV_LIST_NAME'
ORDER BY sequence;
  • Storage > Session State Protection:按需设为「Unrestricted」或其他合适级别

3. 处理页面提交的权限存储逻辑

在用户创建页面的Processing区域,新增一个PL/SQL Process,触发时机设为「After Submit」,用于保存选中的权限记录:

-- 若为编辑用户页面,先删除该用户已有权限(创建用户可省略此步)
DELETE FROM user_menu_permissions
WHERE user_id = :PXX_USER_NAME; -- 替换为页面上用户名字段的项名

-- 插入选中的菜单项权限
FOR i IN (SELECT column_value AS list_entry_id 
          FROM TABLE(apex_string.split(:PXX_SELECTED_MENU_ITEMS, ':'))) LOOP
    INSERT INTO user_menu_permissions (user_id, list_entry_id)
    VALUES (:PXX_USER_NAME, i.list_entry_id);
END LOOP;

4. 配置导航菜单的权限检查

进入「Shared Components > Lists」,找到你的导航菜单,编辑菜单项(可批量设置默认条件后再调整个别项):

  • Condition Type:选择「PL/SQL Expression」
  • Expression:写入判断当前用户是否有权限的逻辑,两种方式可选:
    方式一(直接查询):
    EXISTS (
        SELECT 1 FROM user_menu_permissions
        WHERE user_id = :APP_USER
          AND list_entry_id = :LIST_ENTRY_ID
    )
    
    方式二(复用授权方案):先在「Shared Components > Authorization Schemes」创建名为USER_MENU_ACCESS的授权方案,把上述查询逻辑封装进去,然后表达式写:
    APEX_AUTHORIZATION.IS_ALLOWED(
        p_authorization_name => 'USER_MENU_ACCESS',
        p_parameter1 => :APP_USER,
        p_parameter2 => :LIST_ENTRY_ID
    )
    

额外提示

  • 确保用户创建页面的用户名字段与权限表的USER_ID字段匹配(通常用APP_USER对应的用户名)
  • 若导航菜单项有层级,可补充权限继承逻辑:比如用户能访问子菜单项时,自动允许父菜单项显示
  • 可添加权限清理逻辑,比如删除用户时同步删除其权限记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:51:14