Mar 16, 2011

Как осуществить поиск пользователей по атрибутам предоставленного ресурса?


Short introduction: here you can find a workaround, how to organize search for users in OIM 11g to find users with the specified process form attribute.

Q: Как в OIM 11g, используя стандартный интерфейс пользователя, найти всех пользователей, которым я выделил определенный ресурс с определенным атрибутом?

A: OIM 11g (как и OIM 9.X) позволяет в стандартном интерфейсе осуществлять поиск пользователей только по атрибутам самих пользователей. Но набор этих атрибутов расширяем, и возможно создать атрибут у пользователя, соответствующий необходимому атрибуту формы процесса какого-то ресурса.

Рассмотрим пример. Имеется система MySystem, у нее имеется атрибут PostGrad, соответствующий признаку, что данная учетная запись создана для сотрудника, закончившего аспирантуру (Post Graduate). Форма процесса с требуемым атрибутом показана на рис. 1.

Рис. 1. Форма процесса MySystem

Задача: найти всех пользователей, у которых этот признак установлен в "true".


Очевидное решение –  создать такой же атрибут пользователя и на факт создания пользователя с данным атрибутом или изменения этого атрибута выполнять адаптер, который копирует значение атрибута в атрибут формы пользователя.

1. Создадим новый атрибут пользователя USR_UDF_POSTGRAD. Это можно сделать через административную консоль OIM Advanced Administration -> Configuration -> User Configuration -> User Attributes. Созданный атрибут конфигурации пользователя показан на рис. 2.

Рис. 2. Конфигурация пользователя с расширенным атрибутом Post Graduate.
 
2. Создаем политику авторизации, позволяющую просматривать, изменять и искать по этому атрибуту. Для этого в консоль OIM Administration перейдем на закладку Authorization Policy и создадим политику авторизации ACME Search Post Grad, указав следующие атрибуты:

Тип (Entity Name):                  User Management
Операции (Permissions):         Search User
                                                View User Details                     Атрибут: Post Grad
                                                Modify User Details                  Атрибут: Post Grad

Выбор операций показан на рис. 3.
Рис. 3. Выбор операций для политики авторизации.

3. Пропустите раздел Data Constraint (пусть политика действует для всех пользователей) и на следующей странице укажите роль SYSTEM ADMINISTRATORS, к которой будет применяться политика. Выбор роли показан на рис. 4.

Рис. 4. Выбор роли для назначения политики авторизации.

4. Нажмите Finish для завершения создания политики. Теперь вы сможете просматривать атрибут Post Grade, модифицировать его и осуществлять по нему поиск. Политика авторизации показана на рис. 5.

Рис. 5. Политика авторизации.

Теперь необходимо установить значение этого атрибута при смене соответствующего атрибута в форме процесса ресурса MySystem.

5. В процессе, соответствующему ресурсу MySystem (MySystem prov) добавим новую задачу PostGrade Updated, которая будет вызываться при изменении атрибута формы процесса PostGrade. Задачи процесса показаны на рис. 6.

Рис. 6. Задачи процесса MySystem.

6. Решение задачи для OIM 9.X и попытка его применения для OIM 11g.
 
6.1. Рассмотрим копирование значения прямо в маппинге задачи процесса. Для этого создадим адаптер, возвращающий "1" или "0" в зависимости от признака. Созданный адаптер показан на рис. 7.

Рис. 7. Адаптер, передающий значения из типа Boolean в строковое.

6.2. Назначим этот адаптер на задачу PostGrade Updated. Назначенный адаптер показан на рис. 8.

Рис. 8. Назначение ранее созданного адаптера на задачу Post Grade Updated.

6.3. Установим маппинг возвращаемого значения на User Definition -> Post Graduate (см. рис. 9)

 Рис. 9. Маппинг возвращаемого значения адаптера.

6.4. Установим маппинг передаваемого значения на Process Data -> PostGrad (см. рис. 10)

Рис. 10. Маппинг передаваемого значения.

Теперь при смене атрибута PostGrade формы процесса ресурса MySystem должен изменяться соответствующий атрибут у пользователя. Этот подход работает в OIM 9.X. Проверим его, применительно к OIM 11g.

6.5. Найдем пользователя с выделенным ресурсом MySystem (см. рис. 11). Нажмем Open для редактирования формы процесса.

Рис. 11. Пользователь с ресурсом MySystem.

6.6. На форме процесса установите соответствующий признак и нажмите Save (см. рис. 12). В версии OIM11g вы должны получить информацию об ошибке.


Рис. 12. Форма процесса ресурса MySystem.

В логе должна появиться ошибка, аналогичная следующей:

Рис. 13. Ошибка в OIM 11g.

Внимание. Вышеописанный способ хорошо работает для OIM 9.X, но не применим для OIM 11g. Видимо, обратный маппинг возвращаемых переменных адаптера на User Definition приводит к вызову адаптеров старых объектов данных Users (например, tcUSRcheckACT), что не согласуется с новой конфигурацией пользователей, не использующих объект данных Users.

Как обойти это ограничение в OIM 11g? Можно написать простой Java-класс, который, используя OIM API по ключу пользователя будет устанавливать значение данного атрибута. Рассмотрим это в п. 7.

Текст Java-класса можно посмотреть здесь (по ссылке в статье). Его необходимо скомпилировать, запаковать в JAR-архив и скопировать в каталог $OIM/JavaTasks.

7. Решение задачи для OIM 11g.

7.1. Создадим аналогичный адаптер, который будет изменять значение атрибута пользователя (см. рис. 14).


Рис. 14. Адаптер для установки атрибута Post Grade.

7.2. Добавьте переменные адаптера: usrkey (String, Resolve at Runtime), postgrad(String, Resolve at Runtime) (см. рис.15).


Рис. 15. Переменные адаптера.

7.3. Добавьте задачу адаптера (Add -> Java Task -> New Instance). Как показано на рис. 16, выберем JAR-файл с классом, конструктор по-умолчанию и метод updatePostGrad.

Рис. 16. Выбор класса задачи адаптера.

7.4. Установим маппинг переменных класса (см. рис. 17):
Output: Return Variable
Input (1):          usrkey (Adapter Variable)
Input (2):          postgrad (Adapter Variable)

Рис. 17. Маппинг переменных адаптера на входящие переменные метода.

Скомпилируем адаптер и убедимся, что Compile Status = OK.

7.6. В задаче процесса PostGrad Updated уберем старый адаптер и назначим новый, установим следующий маппинг (см. рис. 18):

Adapter Return Value:              Response Code
usrkey:                                     User Definition -> User Key
postgrad:                                  Process Data -> PostGrad

Рис. 18. Маппинг задачи процесса.

8. Проверка конфигурации.

8.1. Найдем пользователя OIM в OIM Administration Console, у которого есть ресурс MySystem. Убедимся, что признак Post Graduate у него установлен в FALSE (см. рис. 19).

Рис. 19. Атрибут Post Graduate пользователя.

8.2. Зайдем в форму процесса для ресурса MySystem и установим признак PostGrade. (см. рис. 20).

Рис. 20. Форма процесса MySystem.

8.3. Откроем пользователя заново и убедимся (потребуется закрыть атрибуты пользователя и открыть их заново), что атрибут PostGrad установлен в TRUE, см. рис. 21.

Рис. 21. Атрибуты пользователя с Post Graduate = TRUE.

Таким образом, при смене атрибутов формы процесса MySystem мы изменили атрибут пользователя Post Graduate.

8.4. В OIM Advanced Administration перейдем Configuration -> User Configuration -> Search Configuration и выберите атрибут Post Graduate как доступный для поиска (см. рис. 22). Нажмем Save.

Рис. 22. Конфигурация поиска пользователей.

8.5. В OIM Administration перейдем в Advanced Search и добавим атрибут поиска Post Graduate, как показано на рис. 23.

Рис. 23. Добавления атрибута Post Graduate на форму поиска.

8.6. Найдем всех пользователей, у которых атрибут Post Graduate установлен в TRUE, убедимся, что там присутствует наш пользователь (см. рис. 24).

Рис. 24. Поиск по атрибуту Post Graduate.

Задача решена.

No comments:

Post a Comment