同一页面上的 Oracle Apex 多个授权

Oracle Apex multiple authorizations on same page

我有一个关于授权的要求,如果用户是 Admin/Editor,用户可以 read/write 页面。 如果用户是 visitor ,他只能阅读同一页。

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

 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

听起来您希望授权方案为 IS_ADMIN_OR_VISTOR,如果用户是管理员或访客,则授权方案为 return true。这允许管理员和访问者访问该页面。您的只读逻辑意味着访问者将看到该页面为只读,而管理员将看到该页面可编辑。

解决这个问题的一种方法是创建一个基于角色和职责的安全模型(如在 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 的用户访问表单时,他会获取数据,但按钮是隐藏的。当管理员来到屏幕上时,他会看到所有内容。