Сценарии генерации содержимого ролей

Документация Avanpost IDM 7 : 9.6.3. Сценарии генерации содержимого ролей

Сценарии генерации содержимого роли применимы в следующих случаях:

  1. Определение конечного списка прав, предоставляемых ролью, в контексте субъекта авторизации, который получает роль.
  2. Создание права в управляемой системе с набором привилегий в момент назначения роли учетной записи субъекта.

Сценарии должны быть написаны на языке python 2.7 и выполняются в среде IronPython. В сценариях доступна стандартная библиотека IronPython. 

Примечание:

Подробнее о IronPython см. документацию: http://ironpython.net/documentation/.

Примечание:

О применении сценариев генерации содержимого роли в веб-интерфейсе администратора см. статью "5.2.5. Роли" руководства по администрированию.

Навигатор по разделу:

1. Контекст

Для сценария содержимого IDM формирует глобальный контекст:

ПараметрОписание

Configuration

Конфигурация. Свойство типа ICustomConfigurationReadonlyFunctions.

Подробнее о конфигурациях см. статью "9.5. Конфигурации" руководства по разработке.

Configuration.GetConfigurationValueOrDefault(string sectionName, string key)

Функция для получения значения конфигурации. Принимает на вход название секции и ключ конфигурации.

Configuration.GetConfigurationValues(string sectionName)

Функция для получения всех значений конфигураций в секции. Принимает на вход название секции.

Account

Учётная запись, на которую назначается роль. Свойство типа GeneratorAccount.

Account.AddManagedRight(string name)

Функция добавления управляемого права в роль. Принимает на вход наименование управляемого права. Возвращает объект типа GeneratorAccountManagedRight

Параметры GeneratorAccountManagedRight см. в разделе "Параметры GeneratorAccountManagedRight".

Account.AddRight(string rightId, string rightName, bool? createIfMissing = false,
int? resourceId = null, bool? hasAttributes = false)

Функция добавления глобального права в роль. Принимает на вход:

  • Идентификатор глобального права;
  • Наименование глобального права;
  • Флаг создания права при его отсутствии (По умолчанию значение "false". При значении "true" в случае отсутствия запрашиваемого права, оно будет создано);
  • Идентификатор ресурса;
  • Флаг обязательности значений атрибутов объектов доступа, на которые выдается право (По умолчанию значение "false". При значении "true" в случае создания нового глобального права будет обязательным заполнение значений атрибутов объектов доступа).

Возвращает объект типа GeneratorAccountRight.

Параметры GeneratorAccountRight см. в разделе "Параметры GeneratorAccountRight".

Account.AddRightByName(string rightName)

Функция добавления глобального права с заданным именем в роль. Принимает на вход наименование глобального права.

Account.AddObjectRight(string objectUri, string objectRightId,
string name = null, bool includeSchemeInName = false)

Функция добавления объектного права с заданным идентификатором объекта и права в роль. Принимает на вход:

  • Uri права;
  • Идентификатор права;
  • Наименование права;
  • Флаг для включения схемы в имя права. (По умолчанию значение "false". При значении "true" наименование права будет uri + " - " + (right.Name ?? right.Id))

Account.AddObjectRightByName(string rightName)

Функция добавления объектного права с заданным именем в роль. Принимает на вход наименование объектного права.

Account.AddExtendedRight(string rightId, string rightName,
bool? hasAttributes = false)

Функция добавления глобального составного права в роль. Принимает на вход:

  • Идентификатор глобального составного права;
  • Наименование глобального составного права;
  • Флаг обязательности значений атрибутов объектов доступа, на которые выдается право (По умолчанию значение "false". При значении "true" в случае создания нового глобального права будет обязательным заполнение значений атрибутов объектов доступа).

Возвращает объект типа GeneratorAccountRight.

Параметры GeneratorAccountRight см. в разделе "Параметры GeneratorAccountRight".

Account.AddExtendedRightByName(string rightName)

Функция добавления глобального составного права с заданным именем в роль. Принимает на вход наименование глобального составного права. Возвращает объект типа GeneratorAccountRight.

Параметры GeneratorAccountRight см. в разделе "Параметры GeneratorAccountRight".

Debug

Вспомогательные средства отладки. Свойство типа ScriptDebug.

Debug.Print(string text)

Функция вывода отладочной информации.

Transliterate(string str)

Функция применения транслитерации к возвращаемому значению.

GetAccountInProfile()

Функция для получения учетной записи со свойствами в профиле ресурса. Возвращает объект ScriptAccount, в который включены свойства.

GetAccountsInProfile()

Функция для получения учетных записей со свойствами в профиле ресурса. Возвращает массив объектов ScriptAccount, в которые включены свойства.

GetAccountInProfileForRole()

Функция для получения учетной записи со свойствами в профиле ресурса для роли. Возвращает объект ScriptAccount, в который включены свойства.

GetAccountsInProfileForRole()

Функция для получения учетных записей со свойствами в профиле ресурса для роли. Возвращает массив объектов ScriptAccount, в которые включены свойства.

GetContentResources()

Функция для получения ресурсов со свойствами. Возвращает массив объектов ScriptResource, в которые включены свойства.

Employee

Сотрудник, которому назначается роль. Свойство типа ScriptEmployee.
Данное свойство доступно, если роль назначается на сотрудника. В ином случае оно будет пустым.

Параметры Employee см. в разделе "Параметры Employee".

Unit

Юнит, которому назначается роль. Свойство типа UnitScriptModel.
Данное свойство доступно, если роль назначается на юнит. В ином случае оно будет пустым.

Параметры Unit см. в разделе "Параметры Unit".

Role

Роль, которая назначается. Свойство типа ScriptRole.

Параметры Role см. в разделе "Параметры Role".

1.1. Параметры GeneratorAccountManagedRight

ПараметрОписание

ManagedRightName

Название управляемого права. Строковой тип.

Conditions 

Атрибуты. Массив значений типа GeneratorAccountObjectPredicate. Данный тип содержит свойства:

  • AttributeId (Строковый тип) Идентификатор атрибута из коннектора;
  • AttributeLabel (Строковый тип) Человекочитаемое название атрибута;
  • Value (Строковый тип) Значение атрибута;
  • ValueLabel (Строковый тип) Человекочитаемое название значения;
  • IsRequired (Тип boolean) При значении "true" значение атрибута должно указываться обязательно.

AddCondition(string attributeId, string value, string attributeLabel = null,
string valueLabel = null, bool isRequired = false)

Функция для добавления условия. Принимает на вход:

  • Идентификатор атрибута;
  • Значение;
  • Метку атрибута;
  • Метку значения;
  • Флаг обязательности условия. По умолчанию значение "false".

1.2. Параметры GeneratorAccountRight

ПараметрОписание

ConnectorId

Идентификатор коннектора. Строковый тип.

Name

Название права. Строковый тип.

CreateIfMissing

Флаг. При значении "true" право будет добавлено в случае его отсутствия.

ResourceId

Идентификатор ресурса. Целочисленный тип.

RightId

Идентификатор права. Строковый тип.

HasAttributes

Флаг наличия атрибутов. При значении "true" для права можно указывать значения атрибутов объектов доступа, на которые оно выдаётся.

FlattenRights()

Функция, которая возвращает плоский список, содержащий этот экземпляр права и все вложенные.

AsRef()

Функция, которая возвращает ссылку на право, достаточную для использования в коннекторе.

GetRawId()

Функция, которая возвращает идентификатор права с вектором всех значений атрибутов в JSON.

Description

Произвольное название для права, удобное для отображения в IDM. Строковый тип.

RiskPoints

Целое число, задаваемое администратором. Добавляет очки риска к учётной записи, обладающей этим правом.

Resource

Ресурс права. Свойство типа Resource.

IsEffective

Флаг. При значении "true" право невозможно выдать УЗ напрямую, Такое право может использоваться только в качестве состава другого права.

IsDeleted

Флаг. При значении "true" запись является архивной, скрывается из списка, право никогда не считается лишним при аудите.

LastSynchronizationDate

Время последней синхронизации права. Тип DateTimeOffset.

Effective

Вложенные права. Массив значений типа GeneratorAccountEffectiveRight. Данный тип содержит свойства:

  • RightId (Строковый тип) Идентификатор права;
  • Name (Строковый тип) Название права;
  • ObjectUri (Строковый тип) URI объекта;
  • IsEffective (Тип boolean) Флаг. При значении "true" право невозможно выдать УЗ напрямую. Такое право может использоваться только в качестве состава другого права.

Conditions

Атрибуты объектов, соответствующих праву. Массив значений типа GeneratorAccountObjectPredicate. Данный тип содержит свойства:

  • AttributeId (Строковый тип) Идентификатор атрибута из коннектора;

  • AttributeLabel (Строковый тип) Человекочитаемое название атрибута;

  • Value (Строковый тип) Значение атрибута;

  • ValueLabel (Строковый тип) Человекочитаемое название значения;

  • IsRequired (Тип boolean) При значении "true" значение атрибута должно указываться обязательно.

AddEffective(string rightId, string name, string objectUri = null,
bool isEffective = false)

Функция для добавления вложенного права. Принимает на вход:

  • Идентификатор права;
  • Название права;
  • URI объекта;
  • Флаг isEffective. По умолчанию значение "false". При значении "true" право невозможно выдать УЗ напрямую. Такое право может использоваться только в качестве состава другого права.

AddCondition(string attributeId, string value, string attributeLabel = null,
string valueLabel = null, bool isRequired = false)

Функция для добавления условия. Принимает на вход:

  • Идентификатор атрибута из коннектора;
  • Значение атрибута;
  • Человекочитаемое название атрибута;
  • Человекочитаемое название значения;
  • Флаг обязательности заполнения значения атрибута. По умолчанию значение "false".

Equals(GlobalRightSpec other)

Функция сравнения глобального права с другим глобальным правом. Принимает на вход объект типа GlobalRightSpec. Возвращает значение типа boolean.

EffectiveEquals(GlobalRightSpec other)

Функция сравнения состава глобального права с составом другого глобального права. Принимает на вход объект типа GlobalRightSpec. Возвращает значение типа boolean.

1.3. Параметры Role 

ПараметрОписание

Role.Id

Идентификатор роли. Целочисленный тип.

Role.Name

Название роли. Строковый тип.

Role.Properties

Расширенные свойства роли. Массив с парами значений string - ExtendedPropertyValueScriptMode. Данный тип содержит свойства:

  • JsonValue (Строковый тип) Значение свойства в формате JSON.

  • NativeValue (тип object) - значение свойства в виде объекта

1.4. Параметры Employee 

ПараметрОписание

Employee.Id

Идентификатор сотрудника. Целочисленный тип.

Employee.EMail

Почтовый адрес сотрудника. Строковый тип.

Employee.FirstName

Имя сотрудника. Строковый тип.

Employee.LastName

Фамилия сотрудника. Строковый тип.

Employee.Patronymic

Отчество сотрудника. Строковый тип.

Employee.PersonnelNumber

Табельный номер сотрудника. Строковый тип.

Employee.Extension

Расширенные данные сотрудника, предоставленные кадровой системой (без наследования). Свойство типа ExtensionBag.

Employee.Extension.Properties

Массив свойств сотрудника, предоставленных кадровой системой.

Employee.BirthDate

Дата рождения в формате ISO 8061 (гггг-мм-дд). Строковый тип.

Employee.Division

Подразделение сотрудника с ссылкой на родительское подразделение. Свойство типа ScriptDivision.

Employee.Division.Id

Идентификатор подразделения сотрудника. Целочисленный тип.

Employee.Division.Name

Название подразделения сотрудника. Строковый тип.

Employee.Division.Extension

Расширенные данные подразделения, предоставленные кадровой системой (без наследования). Свойство типа ExtensionBag.

Employee.Division.Extension.Properties

Массив свойств подразделения, предоставленных кадровой системой.

Employee.Division.Parent

Ссылка на родительское подразделения (рекурсивная). Свойство типа ScriptDivision.

Employee.Division.ManagerId

Идентификатор руководителя подразделения. Целочисленный тип.

Employee.Division.ExternalId

Идентификатор подразделения сотрудника в кадровой системе. Строковый тип.

Employee.Division.GetFullName()    

Функция для получения полного названия подразделения в формате DN (в качестве OU берутся либо первые 64 символа названия подразделения, либо значение Extension.OU)

Employee.Division.GetFullNameExplicit(bool ignoreMissing = false)

Функция для получения полного названия подразделения в формате DN без вывода OU из названий подразделений (в качестве OU берётся только значение Extension.OU) При ignoreMissing=True, если хотя бы одно значение не заполнено, возвращается None, иначе компонент DN пропускается.

Employee.Division.GetPath()

Функция для получения списка подразделений на пути к этому подразделению начиная от корневого и заканчивая текущим.

Employee.Division.GetPath()[0] всегда корневое.

Employee.Position

Должность сотрудника. Свойство типа ScriptPosition.

Employee.Position.Id

Идентификатор должности сотрудника. Целочисленный тип.

Employee.Position.Name

Название должности сотрудника. Строковый тип.

Employee.Position.ExternalId

Идентификатор должности сотрудника в кадровой системе. Строковый тип.

Employee.ExternalId

Идентификатор сотрудника в кадровой системе. Строковый тип.

Employee.PersonId

Идентификатор физического лица в кадровой системе. Строковый тип.

Employee.GetManagerId()

Функция для получения идентификатора руководителя ближайшего по иерархии подразделения кроме тех подразделений, которыми руководит указанный работник.

Employee.GetDirectManagerId()

Функция для получения идентификатора текущего непосредственного руководителя работника.

1.5. Параметры Unit

ПараметрОписание

Unit.Id

Идентификатор юнита. Строковый тип.

Unit.Name

Имя юнита. Строковый тип.

Unit.ParentId

Идентификатор родительского юнита. Строковый тип.

Unit.DisableIdentity

Флаг отключения авторизации. Тип boolean.

Unit.Path

Путь к юниту. Строковый тип.

Unit.Type

Тип юнита. Свойство типа UnitType

Unit.Type.Id

Идентификатор типа юнита. Тип Guid.

Unit.Type.Name

Название типа юнита. Строковый тип.

Unit.Type.AllowAssignments

Флаг разрешения назначения юнитов данного типа сотрудникам. Тип boolean.

Unit.Type.IsIdentitySubject

Флаг, показывающий, являются ли юниты данного типа субъектами авторизации. Тип boolean.

Unit.Type.Icon

Иконка типа юнита. Строковый тип.

Unit.Type.Links

Ссылки на другие типы юнитов. Массив значений типа UnitTypeLink. Данный тип содержит свойства:

  • Id (тип Guid) Идентификатор ссылки;
  • Name (Строковый тип) Название ссылки;
  • ParentTypeId (тип Guid) Идентификатор родительского типа юнитов;

  • ChildTypeId (тип Guid) Идентификатор дочернего типа юнитов;

  • ChildType (тип UnitType) Дочерний тип юнитов;

Unit.Type.Properties

Свойства типа юнитов. Массив значений типа UnitTypeProperty. Данный тип содержит свойства:

  • Order (целочисленный тип) Порядок свойства;
  • Name (Строковый тип) Название свойства;
  • Description (Строковый тип) Описание свойства;
  • Required (тип boolean) Флаг обязательности заполения значения свойства;
  • Unique (тип boolean) Флаг уникальности значения свойства;
  • Indexed (тип boolean) Флаг индексируемости свойства;
  • ValueType (тип UnitPropertyValueType) Тип значения свойства;
  • ValueConfig (Строковый тип) Тип ввода значения свойства;
  • DefaultValue (Строковый тип) Значение по умолчанию для свойства;
  • Id (тип Guid) Идентификатор свойства;
  • UnitTypeId (тип Guid) Идентификатор типа юнитов;
  • Validators (массив типа UnitPropertyValidatorConfig) Валидаторы свойства;

Unit.Type.Children

Дочерние типы юнитов. Массив значений типа UnitTypeChild. Данный тип содержит свойства:

  • Id (тип Guid) Идентификатор юнита;
  • ParentTypeId (тип Guid) Идентификатор родительского типа юнитов;
  • ChildTypeId (тип Guid) Идентификатор дочернего типа юнитов;
  • PatentType (тип UnitType) Родительский тип юнитов;
  • ChildType (тип UnitType) Дочерний тип юнитов;

Unit.Properties

Расширенные свойства юнита. Массив с парами значений string - UnitPropertyValueScriptModel. Данный тип содержит свойства:

  • JsonValue (Строковый тип) - значение свойства в формате JSON;

  • NativeValue (тип object) - значение свойства в виде объекта.

Unit.Links

Ссылки юнита. Массив значений типа UnitLink. Данный тип содержит свойства:

  • ParentId (тип Guid) Идентификатор родительского юнита;
  • TypeId (тип Guid) Идентификатор типа юнита;
  • ChildId (тип Guid) Идентификатор дочернего юнита;
  • Type (тип UnitTypeLink) Тип юнита;
  • Parent (тип Unit) Родительский юнит;
  • Child (тип Unit) Дочерний юнит;

Unit.Responsibles

Ответственные  за юнит. Массив значений типа UnitEmployeeResponsibleScriptModel. Данный тип содержит свойства:

  • EmployeeId (целочисленный тип) Идентификатор сотрудника;

  • Employee (тип Employee) Сотрудник;

  • Function (Строковый тип) Функция ответственного;

  • UnitId (тип Guid) Идентификатор юнита;

  • Id (целочисленный тип) Идентификатор ответственного;

Unit.Assignments

Назначения юнита сотрудникам. Массив значений типа UnitAssignment. Данный тип содержит свойства:

  • Id (тип Guid) Идентификатор назначения;
  • UnitId (тип Guid) Идентификатор юнита;
  • EmployeeId (целочисленный тип) Идентификатор сотрудника;
  • Unit (тип Unit) Юнит;
  • Employee (тип Employee) Сотрудник.

Unit.Children

Дочерние юниты. Массив значений типа Unit. Данный тип содержит свойства и методы:

  • Id (тип Guid) Идентификатор юнита;
  • ParentId (тип Guid) Идентификатор родительского юнита;
  • TypeId (тип Guid) Идентификатор типа юнита;
  • Name (Строковый тип) Имя юнита;
  • Deleted (тип boolean) Флаг удаленного юнита;
  • DisableIdentity (тип boolean) Флаг отключения объекта как субъекта авторизации;

  • Version (целочисленный тип) Версия;
  • Signature (тип Signature) Цифровая подпись;

  • GetTextId() Функция, возвращающая идентификатор юнита строкой;
  • GetRef() Функция, возвращающая ссылку на юнит;
  • Path (Строковый тип) Путь к юниту;
  • Type (тип UnitType) Тип юнита;
  • Acl (тип UnitAcl) ACL юнита;
  • Properties (массив значений типа UnitPropertyValue) Расширенные свойства юнита;
  • Links (массив значений типа UnitLink) Ссылки юнита на другие юниты;
  • Responsibles (массив значений типа UnitResponsible) Ответственные за юнит;

  • Assignments (массив значений типа UnitAssigment) Назначения юнита;

  • Children (массив значений типа Unit) Дочерние юниты;

  • ToString() Функция, возвращающая идентификатор и имя юнита строкой.

2. Примеры сценариев

Добавление глобального права по названию "CN=Protected Users,CN=Users,DC=adtest,DC=local"
Account.AddRightByName('CN=Protected Users,CN=Users,DC=adtest,DC=local')
Если корневое подразделение сотрудника "Отдел маркетинга", то выдать ему право "Выполнение"
if Employee.Division.GetPath()[0].Name == 'Отдел маркетинга':
    Account.AddRightByName('Выполнение')
Добавление глобального составного права, содержащего 2 вложенных права
exetended = Account.AddExtendedRightByName('ExtendedRight')
exetended.AddEffective('eff1', 'eff1')
exetended.AddEffective('eff2', 'eff2')

Обсуждение