使用SQL和APEX创建授权方案

时间:2020-03-21 12:47:22

标签: oracle oracle-apex

我需要在APEX中为不同的角色制定授权方案,例如:

Customers
Agents
Employees (IT Staff)
Employees (Database Admin)
Employees (Other)

我不确定该怎么做。我的老师使用了EXIST SQL查询,其中的授权表如下所示:

CREATE TABLE authorisation (
user_id VARCHAR2(30),
privilege VARCHAR2(30)
 );

然后输入每个用户的ID和特权。

之后,授权查询将如下所示:

SELECT user_id
FROM authorisation
WHERE user_id = :APP_USER AND
privilege = ‘ALL’

但是我不想输入每个用户的ID和授权。我知道“客户”表中的每个人都将具有相同的授权。有没有一种方法可以使某个表中的每个人都得到授权?

1 个答案:

答案 0 :(得分:0)

尽管您抱怨老师的建议,但我还是建议相反-听他们说。当前-某个表中的每个人都具有相同特权的事实,可以在明天进行更改,您将遇到一个问题,可以通过创建其他表(library(dplyr) data %>% group_by(StudentID) %>% mutate(flag = case_when(any(diff(Score) < 0) ~ 1, anyDuplicated(Score) > 0 ~ 2, TRUE ~ 0)) 来轻松避免该问题。

这样做,建议您创建一个存储函数(或者甚至更好的一个包),该函数将返回表明某人是否(或没有)某些特权的值。

例如(这是只有一个功能的程序包主体;您自己创建规范和其他功能):

authorization

因此:如果create or replace package body pkg_authorization as function f_is_customer_01 (par_app_user in varchar2) return number is retval number(1) := 0; begin select 1 into retval from authorization where user_id = par_app_user and privilege = 'CUSTOMER'; return retval; exception when no_data_found then return retval; end; end pkg_authorization; :APP_USER,则函数将返回customer,否则它将返回1。您可能已经创建了它以返回布尔值-它工作得很好,但是-您不能在例如0语句,其select子句和类似内容。

如何使用?例如,如果要向某位客户显示某个区域(或项目),则可以创建服务器端条件,其条件是返回布尔值的函数:

where

我也使用类似的东西;效果很好。