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