Создание пользовательской аутентификации на основе двух разных типов пользователей в apex

#sql #oracle #oracle-apex

#sql #Oracle #oracle-apex

Вопрос:

У меня есть схема аутентификации, которая в настоящее время проверяет, находится ли пользователь только в одной таблице, а именно в таблице employer. Теперь я хочу, чтобы эта схема аутентификации проверяла, является ли пользователь работодателем или сотрудником, и на основе того, являются ли они работодателем или сотрудником, она должна перенаправлять их на разные страницы.

Прежде всего, как бы мне включить вторую таблицу в сценарий аутентификации? И моя самая большая проблема в том, понадобится ли мне второе приложение, которое ссылается на первое приложение при входе сотрудника в систему? Как еще это можно сделать? В настоящее время у меня есть форумы и страницы работодателей только для тех случаев, когда работодатель входит в систему. Если сотрудник входит в систему, как мне скрыть все отчеты / формы работодателя и позволить им видеть только формы / отчеты сотрудников?

Моя текущая схема аутентификации показана ниже.

 FUNCTION authenticate(p_username IN VARCHAR2
  ,p_password IN VARCHAR2) RETURN BOOLEAN IS
   l_value       NUMBER;
   l_returnvalue BOOLEAN;
 BEGIN
   BEGIN
     SELECT 1
       INTO l_value
       FROM employer
      WHERE 1 = 1
        AND upper(employer.username) = upper(p_username)
        AND upper(employer.passwords) = upper(p_password);
   EXCEPTION
     WHEN no_data_found
          OR too_many_rows THEN
       l_value := 0;
     WHEN OTHERS THEN
       l_value := 0;
   END;
   l_returnvalue := l_value = 1;
   RETURN l_returnvalue;
 END;     
  

Комментарии:

1. для аутентификации лучше использовать числовые переменные вместо строкового типа. Например, идентификационный номер вместо p_username.

Ответ №1:

Это проблема «Схемы авторизации», а не проблема «Схемы аутентификации».

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

Для этого вы можете использовать «Схемы авторизации», получая значение true / false в зависимости от того, как вы идентифицируете их как работодателя или сотрудника. Затем вы можете связать эти схемы авторизации с различными компонентами вашего приложения — страницей, пунктами меню / ссылками, отчетами, кнопками, .. ветвями — которые вы могли бы определить на домашней странице вашего приложения.

например: если у пользователя есть схема авторизации x, тогда отправьте их на страницу 2, иначе отправьте их на страницу 3.

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

В вашем примере кода также предлагается хранить текстовые пароли. Не делайте этого. Даже не для примеров. Хэширование паролей должно быть по умолчанию — у Дмитрия Гиелиса есть хороший пример того, как здесь настроить пользовательскую аутентификацию.

И / или просмотрите пример в справке по атрибутам:

введите описание изображения здесь

Комментарии:

1. Привет, спасибо за ответ, я использую обычные текстовые пароли, поскольку я практически новичок в apex и не знаю, как шифровать пароли. У вас есть ссылка для начинающих, которая показала бы мне, как это сделать?

2. Кроме того, если я заставлю схему авторизации работать, искатели не увидят панель навигации работодателей в левой части экрана. Или они увидят это, но не смогут получить к нему доступ, если я введу соответствующие механизмы в

3. Я думаю, что это хорошая разбивка dgielis.blogspot.com/2017/08 / … но вы также получите пример, если откроете справку по атрибутам для вашей пользовательской схемы аутентификации — Имя функции аутентификации

4. Элементы вашего меню могут быть детализированы в зависимости от того, кто имеет доступ, и на уровне страницы вы можете назначить другой список для источника меню.