Свойство «По умолчанию для типа»#

Это свойство указывает, является ли данный тип объекта ресурса типом по умолчанию для данного вида объектов — для учетных записей, привилегий или «общих объектов».

Только один тип может быть типом по умолчанию для данного вида. Установка этого флага на true более чем для одного типа является ошибкой.

Есть два конкретных места, где это используется.

Создание объекта ресурса#

Когда создание объекта ресурса назначается фокусному объекту (например, пользователю), действуют следующие значения по умолчанию:

  1. если тип не указан, предполагается учетная запись;

  2. Если намерение не указано, предполагается намерение «по умолчанию для типа» - для данного типа.

Поиск объектов ресурсов#

Есть ситуации, когда IDM ищет объекты ресурсов. Наиболее заметными являются поиски, выполняемые в рамках операций импорта или согласования. Использование projectionDiscriminator в associationFromLink также приводит к операции поиска. (Смотрите образцы конструкций ниже.)

Когда вы ищете объекты ресурсов без указания имени класса объекта, применяется следующее:

  1. тип должен быть указан;

  2. если намерение не указано, предполагается намерение «по умолчанию для типа» - для данного типа.

Пример#

Давайте рассмотрим следующую конфигурацию типов объектов:

Образец конфигурации

<objectType>
    <!-- no kind nor intent specified --> (1) (2)
    <displayName>Default account</displayName>
    <defaultForKind>true</defaultForKind>
    <!-- ... -->
</objectType> 
<objectType>
    <kind>account</kind>
    <intent>testing</intent>
    <displayName>Testing account</displayName>
    <!-- ... -->
</objectType>
<objectType>
    <kind>entitlement</kind>
    <intent>group</intent>
    <displayName>Standard group</displayName>
    <defaultForKind>true</defaultForKind>
    <!-- ... -->
</objectType>
<objectType>
    <kind>entitlement</kind>
    <intent>other</intent>
    <displayName>Some other entitlement</displayName>
    <!-- ... -->
</objectType>

1

Если вид не указан в определении, предполагается account.

2

Если намерение не указано в определении, предполагается default(буквально).

Образцы построения ресурсных объектов#

<role xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3">
    <!-- ... -->
    <assignment>
        <construction>
            <resourceRef oid="0e5b7304-ea5c-438e-84d1-2b0ce40517ce"/>
            <kind>entitlement</kind>
            <!-- no intent specified --> (1)
        </construction>
    </assignment>
    <inducement>
        <construction>
            <resourceRef oid="0e5b7304-ea5c-438e-84d1-2b0ce40517ce"/>
            <!-- no kind nor intent specified --> (2)
            <association>
                <ref>ri:groups</ref>
                <outbound>
                    <expression>
                        <associationFromLink>
                            <projectionDiscriminator>
                                <kind>entitlement</kind>
                                <!-- no intent specified --> (3)
                            </projectionDiscriminator>
                        </associationFromLink>
                    </expression>
                </outbound>
            </association>
        </construction>
    </inducement>
</role>

1

Предполагается group намерение, поскольку оно помечено как «по умолчанию для вида» для привилегий

2

Предполагается account вид, а внутри него default намерение, так как оно помечено как «по умолчанию для вида» для учетных записей

3

Предполагается group намерение, поскольку оно помечено как «по умолчанию для вида» для привилегий, и здесь мы выполняем поиск привилегий

«Свойство по умолчанию для класса объектов»#

Это свойство указывает, является ли данный тип ресурса объекта типом по умолчанию для его класса объектов, например, для ri:AccountObjectClass или ri:inetOrgPerson.

Только один тип может быть типом по умолчанию для данного класса объектов. Установка этого флага в значение true для более чем одного типа является ошибкой.

Есть два конкретных места, где это используется.

Классификация ресурсов объектов#

При классификации ресурсных объектов мы часто используем тип, помеченный как «по умолчанию для класса объектов», в качестве типа «всеобъемлющего» при отсутствии других подходящих типов. Однако эта функциональность также может быть реализована - возможно, более чисто - с использованием свойства classificationOrder разграничения типов объектов. Смотрите описание алгоритма классификации.

Поиск стандартных определений#

Это применимо при поиске ресурсных объектов, обычно в процессе импорта или согласования, и использовании только имени класса объектов. Например:

Импорт учетных записей по имени класса объектов

<task>
    <!-- ... -->
    <activity>
        <work>
            <import>
                <resourceObjects>
                    <resourceRef oid="2696334a-c3d1-4aa6-b147-ff16cd387a0f"/>
                    <objectclass>ri:inetOrgPerson</objectclass>
                </resourceObjects>
            </import>
        </work>
    </activity>
</task>

Существуют определения, которые должны применяться при выполнении запроса к ресурсу (поиск всех inetOrgPerson объектов). Например, IDM должен указать атрибуты для возврата или базовый контекст. Когда defaultForObjectClass используется в определении типа, которое ссылается на класс inetOrgPerson, это определение типа используется для предоставления необходимой информации. (Обратите внимание, что IDM все еще пытается синхронизировать всех членов inetOrgPerson).

Однако начиная с версии 4.6, предпочтительным способом предоставления таких определений уровня объектного класса, которые должны применяться ко всем объектам данного объектного класса (например, inetOrgPerson), является использование Переопределение объектного класса — предоставление уточнения schemaHandling/objectClass для ri:inetOrgPerson. Поэтому больше не нужно и не рекомендуется указывать тип объекта по умолчанию для объектного класса только для этой цели.

В целом лучше избегать настройки defaultForObjectClass и, следовательно, также настройки default.

Свойство «По умолчанию»#

Это сокращенный способ указания как defaultForKind, так и defaultForObjectClass.

Эти три свойства, defaultForKind, defaultForObjectClass и default, могут быть изменены или даже удалены в будущем.