Схема авторизации Oracle Apex на основе значения элемента страницы - PullRequest
0 голосов
/ 01 мая 2018

В настоящее время я работаю в Oracle Apex версии 5.1 и пытаюсь настроить схему авторизации, основанную на значении элемента страницы текстового поля на странице 31 в моем приложении, а также других факторах, но я не имеет успеха.

Я создал динамический список на основе запроса SQL из одной из моих таблиц под названием NAVIGATION. Затем я использовал этот список в качестве моего «Меню навигации» в моем приложении. Я настроил запрос для списка таким образом, чтобы при нажатии на вкладку «Меню навигации», которая направляет меня на страницу 31 в приложении, значение для рассматриваемого элемента страницы текстового поля автоматически помещалось в это текстовое поле. Однако я также настроил запрос для списка таким образом, чтобы несколько вкладок в меню навигации фактически перенаправляли пользователя на страницу 31, но значение, которое передается элементу страницы текстового поля, зависит от вкладки меню навигации, которая щелкнул. Другими словами, этот элемент страницы текстового поля может содержать различные значения в зависимости от того, какая вкладка в меню навигации была нажата. Я настроил это так потому, что на странице 31 отображаются разные вещи в зависимости от значения в этом текстовом поле. Это все работает отлично. Однако то, что я хочу отобразить на этой странице, зависит от того, кто является пользователем, что подводит меня к вопросу о схеме авторизации.

Теперь я хочу настроить схему авторизации для страницы 31, которая зависит от этого элемента страницы текстового поля, а также зависит от конкретных данных из одной из моих таблиц, называемых TEAMMEMBERS. TEAMMEMBERS имеет столбец с именем «username» и столбец с именем «P31_Access». Столбец «имя пользователя» содержит имя пользователя для входа в приложение. «P31_Acess» содержит различные значения, которые могут быть помещены в это текстовое поле на странице 31. Поэтому в основном я хочу, чтобы, если я нажму на одну из вкладок в меню навигации, которая приведет меня на страницу 31, я хочу, чтобы приложение посмотрите в моей таблице TEAMMEMBERS, найдите мое имя пользователя в столбце "username" и затем посмотрите, чтобы увидеть значение в столбце "P31_Access" в той же строке. Если значение в «P31_Access» в этой строке совпадает со значением элемента страницы текстового поля на странице 31, мне разрешен доступ. В противном случае доступ не предоставляется.

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

Это то, что я имею до сих пор, но это не дает результата, который я ищу.

SELECT 1
FROM TEAMMEMBERS
WHERE P31_ACCESS = :P31_ACCESS
AND upper(username) = upper(:APP_USER);

Я уверен, что с моим запросом много проблем, но я просто не знаю точно, как его написать. У кого-нибудь есть какие-либо идеи? Мне интересно, лучше ли будет использовать PLSQL, который возвращает логическое значение для этой схемы авторизации, но я не уверен.

Заранее спасибо.

1 Ответ

0 голосов
/ 02 мая 2018

Мое первое предположение - то, что P31_ACCESS не устанавливается в состоянии сеанса. Поскольку вы запускаете процесс не на своей странице, его нужно настроить на сервере, и он должен быть установлен на раннем этапе процесса генерации страницы. Таким образом, вам, вероятно, потребуется вычисление на шаге перед заголовком, чтобы установить его значение.

Убедитесь, что процесс авторизации выполняется не один раз за сеанс. Вы, вероятно, хотите один раз на просмотр страницы.

Исходя из вашего описания, звучит так, будто вы хотите, чтобы ваш запрос был таким, и убедитесь, что это тип запроса Exists SQL:

SELECT 1
FROM TEAMMEMBERS
WHERE ( P31_ACCESS = :P31_ACCESS OR P31_ACCESS IS NULL )
AND upper(username) = upper(:APP_USER);
...