Как скрыть страницы на основе пользовательской аутентификации - PullRequest
1 голос
/ 28 марта 2019

У меня есть пользовательская аутентификация, которую я добавлю в раздел кода ниже на основе 2 таблиц, таблицы сотрудников и таблицы работодателей. Когда работодатель входит в систему, он может видеть свои банковские реквизиты и список всех отчетов сотрудников. Когда сотрудник входит в систему, я хочу, чтобы страница банковских реквизитов работодателя была скрыта, а список всех страниц сотрудника также был скрыт, и я хочу, чтобы вместо этого отображалась страница сведений о сотруднике. Я не уверен, как это сделать вообще. Самой близкой вещью, которую я нашел, была пользовательская схема авторизации, но для этого требовалось, чтобы администратор БД вручную предоставил пользователям разрешения.

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

Еще одно примечание) Пожалуйста, не обращайте внимания на тот факт, что пароли хранятся в виде простого текста, это домашняя проблема, а шифрование еще не изучено.

function authenticate( p_username varchar2, p_password varchar2 ) return boolean is  
begin  
  return(  
     Table1Authenticate( p_username, p_password )  
     or  
     Table2Authenticate( p_username, p_password )  
   );  
end; 


create or replace function Table1Authenticate( p_username varchar2, p_password varchar2 ) return boolean is  
   i integer;  
begin  
   select  
      1 into i  
  from employer  
  where upper(employer.username) = upper(p_username)  
  and   upper(employer.passwords) = upper(p_password);  
  return( true );  
exception when NO_DATA_FOUND then  
  return( false );  
end;

create or replace function Table2Authenticate( p_username varchar2, p_password varchar2 ) return boolean is  
   i integer;  
begin  
   select  
      1 into i  
  from employee
  where upper(employee.username) = upper(p_username)  
  and   upper(employee.password) = upper(p_password);  
  return( true );  
exception when NO_DATA_FOUND then  
  return( false );  
end;

Ответы [ 3 ]

1 голос
/ 28 марта 2019

В Oracle Apex вы можете ограничить доступ к странице, используя Page > Security > Authorization Scheme. Вы можете создать пользовательскую функцию, возвращающую логическое значение как пользовательскую схему авторизации в Shared Components > Authorization Schemes и используемую на требуемых страницах. Надеюсь, это поможет вам.

0 голосов
/ 28 марта 2019

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

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

Это не проблема аутентификации. Это вопрос привилегий, как только вы войдете.

Аналогия: могу ли я войти в свой банк? Конечно. Что я могу сделать, когда попаду туда - только то, что может сделать любой клиент, только со своими аккаунтами. Это аутентификация, привилегии и безопасность на уровне строк в действии, соответственно.

0 голосов
/ 28 марта 2019

Я думаю, что вам лучше всего использовать аутентификацию, при которой вы запускаете динамическое действие, которое затем скрывает таблицу банковских реквизитов работодателя. Возможно, установите для аутентификации значение скрытого элемента (работодателя или сотрудника) и установите динамическое действие на основе значения элемента. Чтобы быть немного более безопасным, установите динамическое действие, если работодатель, true: показать банковские реквизиты работодателя таблицы, false: скрыть банковские реквизиты работодателя таблицы и выполнить только ложное действие, выполняемое при загрузке. Надеемся, это сработает

РЕДАКТИРОВАТЬ: Черт, я не читал вопрос достаточно хорошо, я думаю. Я думал, что вы хотели таблицы на одной странице. Так что

...