Создание схем авторизации с SQL и APEX - PullRequest
0 голосов
/ 21 марта 2020

Мне нужно сделать схемы авторизации в APEX для разных ролей, таких как:

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

Я не уверен, как go узнать об этом. Мой учитель использовал EXIST SQL QUERY, в котором таблица авторизации была сделана так:

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

Затем были введены ID и привилегия каждого пользователя.

впоследствии запрос авторизации будет выглядеть примерно так:

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

Но я не хочу вводить идентификатор и авторизацию каждого пользователя. Я знаю, что все в таблице Customer будут иметь одинаковые полномочия. Есть ли способ сделать запрос, который позволяет каждому из определенной таблицы быть авторизованным?

1 Ответ

0 голосов
/ 21 марта 2020

Хотя вы жалуетесь на то, что учитель предложил, я бы предложил обратное - послушайте, что они сказали. Тот факт, что - в настоящее время - все в какой-либо таблице имеют одинаковые привилегии, может быть изменен завтра , и у вас возникнет проблема, которую можно легко избежать, создав дополнительную таблицу (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. Вы могли бы создать его так, чтобы он возвращал Boolean - он работает просто отлично, но - вы не можете использовать его, например, в операторе select, его предложении where и т. П.

Как его использовать? Например, если вы хотите отобразить какой-либо регион (или элемент) для того, кто является клиентом, вы создадите условие на стороне сервера, тип которого является функцией, возвращающей логическое значение:

return pkg_authorization.f_is_customer_01(:APP_USER) = 1;

Я использую что-то подобное также; работает просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...