Oracle apex 19.1 (аутентификация и авторизация пользователей)

Я создаю приложение (приложение x), которое потребует защиты определенных частей приложения. По сути, мне нужно приглашение авторизации для выборочного отклонения / принятия доступа. Быстрый пример желаемого результата:

  • В приложении х есть дневник, касающийся налоговых деклараций.

  • Джон выбирает значок дневника, затем он вводит свое имя пользователя и пароль.

  • Джон теперь получил доступ.
  • Лиза пытается получить доступ к дневнику, но ее учетные данные отклонены. *

Как вы можете видеть в этом примере, Джон является Авторизованным пользователем, а Лиза - нет.

Как я могу реализовать это на вершине?

Пошаговое руководство мне бы очень понравилось. Меня также немного смущает разница между Аутентификацией и Авторизацией.

Всего 1 ответ


Создайте таблицу, которая содержит информацию о привилегиях, например

create table priv
  (app_user varchar2(30),
   priv     varchar2(20) 
  );

insert into priv (app_user, priv) 
  select 'JOHN', 'admin' from dual union all
  select 'LISA', 'oper'  from dual;

Теперь создайте набор функций (предпочтительно содержащихся в пакете), которые будут - для каждого пользователя - возвращать, предоставлены ли им (или нет) определенные привилегии. Вы можете вернуть Boolean, но - тогда вы не сможете использовать его в чистом SQL.

create or replace function f_priv_admin_01 (par_app_user in varchar2)
  return number
is
  -- return 1 if PAR_APP_USER is admin; return 0 otherwise
  retval number := 0;
begin
  select 1
  into retval
  from priv
  where app_user = par_app_user
    and priv = 'admin'

  return retval;
exception
  when no_data_found then
    return retval;
end;

В приложении Apex, используя «Условие на стороне сервера», используйте «Функция, которая возвращает логическое значение», например

return f_priv_admin_01 (:APP_USER) = 1;

в котором говорится: если пользователь в данный момент вошел в систему как 'admin', отобразите эту страницу / регион / дневник независимо от того, что. В противном случае нет.


Есть идеи?

10000