【问题标题】:Oracle Apex multiple authorizations on same pageOracle Apex 同一页面上的多个授权
【发布时间】:2021-03-30 15:16:34
【问题描述】:

我有一个关于授权的要求,如果用户是管理员/编辑,用户可以读/写页面。 如果用户是访问者,他只能阅读同一页面。

我在存在 sql 查询的地方创建了授权方案 IS_ADMIN:

 select 1 from users where role_id in(select role_id from roles where name ='Admin')

现在我在页面上应用了这个授权方案。

在只读中,我选择了函数体,plsql并写入:

If apex_authorized.is_authorized ('IS_ADMIN')
RETURN FALSE
ELSE RETURN TRUE;
END IF;

我应用这个假设这会使页面只读给非管理员用户。 但是由于我设置的授权方案和错误消息,当我以访问者角色登录时,我只是得到错误。我为授权方案提供的相同错误消息。

在这种情况下应用多授权方案的最佳方式是什么?

顶点:20.2

【问题讨论】:

    标签: oracle-apex


    【解决方案1】:

    解决此问题的一种方法是创建一个基于角色和职责的安全模型(就像在 ERP 系统中所做的那样)。角色被授予用户(例如 ADMIN、VISITOR 等),并且职责与应用程序功能相关联(例如 VIEW_EMP、EDIT_EMP)。然后将职责授予角色或其他职责。授权方案是根据职责创建的(应用不知道角色)。

    EMP 表单示例:要求 VISITOR 可以查看数据,ADMIN 可以编辑数据

    创建职责:VIEW_EMP 和 EDIT_EMP 以及匹配的授权方案。 角色 VISITOR 负责 VIEW_EMP。
    责任 EDIT_EMP 有责任 VIEW_EMP(这样拥有 EDIT_EMP 的人就会自动获得 VIEW_EMP)。
    角色 ADMIN 负责 EDIT_EMP。

    在表单中,您将页面的身份验证方案设置为 VIEW_EMP,将 CREATE/SAVE/DELETE 按钮和 DML 页面进程的身份验证方案设置为 EDIT_EMP。

    因此,当具有 VISITOR 的用户访问表单时,他会获取数据但按钮是隐藏的。当管理员出现在屏幕上时,他看到了所有内容。

    【讨论】:

      【解决方案2】:

      听起来您希望授权方案为IS_ADMIN_OR_VISTOR,如果用户是管理员或访问者,它将返回true。这允许管理员和访问者访问该页面。然后,您的只读逻辑意味着访问者会将该页面视为只读,而管理员会将该页面视为可编辑。

      【讨论】:

      • 好的,所以授权方案将拥有所有用户。那我应该怎么写只读逻辑呢?
      • 如果我使用授权方案为:(管理员,用户)中的角色,并且用户使用相同的只读逻辑,它将使页面对所有用户只读
      • @Vini - 如果用户是访问者,apex_authorized.is_authorized ('IS_ADMIN') 会返回什么?我希望它返回false,以便只读语句返回true。但是,如果它返回 true,这将导致用户可以编辑页面。
      • 是的,你是对的,但是当我这样做时,它使页面只对管理员和用户只读。只读逻辑需要写成函数代码/pl sql还是有其他方式定义?
      • 好的,我认为这是一个与会话相关的问题。当我登录一个新的新会话时,它正在工作。可能与缓存有关。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多