пятница, 12 октября 2012 г.

Управляем доступом - 3. Собираем мысли в кучу.

Да, да, я эпически зафейлил выполнение своего обещания. Выкладываю пост с опозданием и надеюсь, что никому не испортил настроение и не сорвал срок сдачи проекта ;)




Что вообще такое "авторизация" и "аутентификация" в апексе и зачем все это нужно

По-хорошему, с этого надо было начинать первый пост из серии "Управление доступом". Я перечитал предыдущие два поста (написанные больше трех месяцев назад), и у меня в голове осталось некое подобие каши. Совершенно несъедобной, кстати.

Итак, авторизация - это процесс предоставления некоему лицу прав на выполнение каких-то действий, а также проверка того, что эти права предоставлены. Аутентификация - процедура проверки подлинности пользовательских данных (имени и пароля, например).
Как это работает в апексе? Приложение, сделанное на апексе, имеет несколько видов доступности (посмотреть можно в разделе Application Properties самого приложения), но они связаны с процессом разработки: пока приложение в разработке, его видят только разработчики, а когда разработка закончена, приложение делается доступным для пользователей одним кликом мыши.

Управление доступом пользователей начинается на уровне страниц и элементов страниц. Разграничение доступа организовано в два этапа. На первом этапе вы указываете, является ли страница публичной или нет. Публичная страница будет доступна всем, непубличная - только пользователю, который ввел логин и пароль. Свойство страницы, о котором идет речь, называется Authentication, и оно не имеет прямого отношения к схемам аутентификации. Схема аутентификации в апексе - это набор правил для проверки подлинности пользователя (об этом, собственно, первый пост). Эта схема используется в тот момент, когда пользователь вводит логин и пароль на странице логина. Одним этапом можно и ограничиться - сделать два вида страниц, одни - для всех, другие - для избранных.

Если такого разграничения недостаточно, можно подключить второй этап проверки - схемы авторизации (как они работают, описано во втором посте). Схему авторизации можно задавать не только страницам, но и элементам страниц (итемам, регионам, кнопкам, процессам и т. д.), для чего нужно выбрать нужную схему в свойстве Authorization Scheme на закладке Security. Смысл этих схем в том, что вы разбиваете элементы приложения на группы по некоему принципу (на ваше усмотрение), а затем любым понравившимся способом даете пользователям доступ к этим группам. Я, например, пользователей тоже объединяю в группы ("роли доступа") и устанавливаю соответствие между группами пользователей и группами элементов приложения.

Ключевой элемент схемы авторизации - функция, проверяющая, есть ли право у пользователя получить доступ к элементу. Функция имеет небольшой недостаток. Она не принимает параметров, поэтому внутри функции вы можете опознать пользователя только с помощью apex_custom_auth.get_user, страницу приложения - как :APP_PAGE_ID (или, как вариант, apex_application.g_flow_step_id), а элемент страницы (итем, регион, процесс и т. д.) - никак.

В принципе, не бог весть какая проблема, но если очень-очень хочется, можно выразить свое мнение (предварительно зарегистрировавшись) на специальной страничке на сайте Oracle. На сайте ведется голосование (голосовалка тоже сделана на апексе!), где каждый может предложить свою фичу и проголосовать за предложенные другими участниками. Эта фича (передача нараметра в функцию авторизации) уже предложена, голосуйте.

И это еще не конец!

Пока я писал этот пост, мне пришла в голову интересная мысль. Поэтому про управление доступом будет еще один пост. Может быть даже скоро.

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

Отправить комментарий