如何让用户看到一些导航菜单项?

问题描述 投票:0回答:2

我有一个用于创建用户的页面。 我想在创建用户时通过包含所有导航菜单项的列表来指定他有权从导航菜单中查看的项目

我尝试使用 apex_application_list_entries 来做到这一点

有人可以帮助我吗?

oracle-apex apex
2个回答
0
投票

在我看来,我不喜欢你的做法。

考虑授权

  • 创建不同的角色,例如
    admin
    (会看到所有内容)、
    manager
    (会看到很多东西,但不是全部)、
    clerk
    (只会看到与工作相关的内容)等.
  • 您创建的每个用户都应该具有以下角色之一
  • 创建一个接受例如
    :APP_USER
    并返回他们的角色
  • 创建使用先前创建的功能的授权方案数量(在 Apex 中)
  • 在 Apex 中,为每个页面和导航菜单列表条目设置“授权方案”属性,这将防止未经授权的访问

这样做,您不必让每个用户看到任何特定页面本身 - 授权会处理它。

请注意:如果 Apex 应用程序有 150 个页面,您将必须为每个新用户逐一选择任意数量的页面,并且不能保证您会记住哪些页面确切属于假定的页面集由该用户访问。


0
投票

您可以创建动态列表,然后将其设置为应用程序共享组件中的导航菜单列表。

您可以使用以下查询从数据库架构中获取列表项。

select level level_value,
        menu_name label_value,
        apex_page.get_url(p_page => module_id) target_value,
        null is_current,
        icon_html image_value
    from (
        select distinct(menu_id), parent_menu_id, module_id, menu_name, icon_html, menu_seq
        from system_menu 
        where user_id = :APEX_USER_ID
    )
START WITH parent_menu_id IS null
CONNECT BY PRIOR menu_id = parent_menu_id
ORDER SIBLINGS BY MENU_SEQ

system_menu表ddl描述为:

CREATE TABLE  "SYSTEM_MENU" 
   (    "MENU_ID" NUMBER NOT NULL ENABLE, 
    "PARENT_MENU_ID" NUMBER, 
    "MODULE_ID" NUMBER, 
    "NAME_AR" NVARCHAR2(255) NOT NULL ENABLE, 
    "NAME_EN" NVARCHAR2(255), 
    "ICON_HTML" NVARCHAR2(255), 
    "IS_NUMBER" NUMBER(22,1),
    "USER_ID" VARCHAR2(255),
    "MENU_SEQ" NUMBER, 
     CONSTRAINT "H_SYSTEM_MENU_PK" PRIMARY KEY ("MENU_ID")
  USING INDEX  ENABLE
   )

要了解有关动态列表的更多信息,请阅读此 ORACLE APEX 文档

© www.soinside.com 2019 - 2024. All rights reserved.