Правила субординации (subordination)

Описание

Набор правил определяет отношения субординации между пользователями.
Отношения задаются между пользователями, группами и ролями. Существует также особый тип - ВСЕ ('all').
Каждое отношение задается между одним вышестоящим элементом одного из типов и несколькими нижестоящими элементами одного из типов.
Группы и пользователи задаются идентификаторами, роли задаются именами.

По умолчанию добавляется правило "ВСЕ КО ВСЕМ". При наличии такого правила, все остальные правила не имеют значения.

На основе набора правил субординации рассчитывается кэш субординаций, содержащий приведенные к пользователями и сокращенные списки подчинения.
При наличии правила субординации "ВСЕ КО ВСЕМ" в кэше содержится только оно. Ключом является строка "all". В противном случае кэш содержит по одному элементу для каждого пользователя с непустым списком подчиненных (включая его самого).
При подчиненности пользователю всех остальных пользователей (включая его самого) в кэш для него попадает значение 'all' (в списке).
В остальных случаях для пользователя перечислены идентификаторы всех других пользователей, подчиненных к нему на основе развертки правил через раскрытие групп и ролей.

Ограничения

  • После изменения по истечении 5 секунд, но не позднее чем через 30 секунд.

Поля

Структура сущности
{
  "id": uuid,
  "top_type": str,
  "top_key": str,
  "sub_type": str,
  "sub_keys": array<str>,
  "opts": {
    "title": str,
    "comment": str
  },
  "ext": {
    "ct": date,
    "lwt": date
  }
}
Table 1. Поля
Спецификация Описание

Поле: id
Режим: inout
Тип: uuid
По умолчанию: generated

Идентификатор. Может быть задан при создании, иначе генерируется системой.

Поле: top_type
Режим: in
Тип: str
По умолчанию: required

Тип вышестоящего элемента.
Возможные варианты:

  • all - все пользователи домена ('top_key' не имеет значения).

  • user - пользователь домена. ('top_key' содержит идентификатор существующего пользователя).

  • group - группа домена. ('top_key' содержит идентификатор существующей группы).

  • role - пользовательская роль доступная в домене. ('top_key' содержит название роли).

Поле: top_key
Режим: in
Тип: str
По умолчанию: empty

Идентификатор вышестоящего элемента соответствующего типа ('top_type)'. Элемент с указанным типом и идентификатором должен существовать в домене.
Не применяется, если в 'top_type' задано значение 'all'.

Поле: sub_type
Режим: in
Тип: str
По умолчанию: required

Тип подчиненных элементов.
Возможные варианты:

  • all - все пользователи домена ('sub_keys' не имеет значения).

  • user - пользователь домена. ('sub_keys' содержит идентификаторы существующих пользователей).

  • group - группа домена. ('sub_keys' содержит идентификаторы существующих групп).

  • role - пользовательская роль доступная в домене. ('sub_keys' содержит названия ролей).

Поле: sub_keys
Режим: in
Тип: array
По умолчанию: empty

Список идентификаторов подчиненных элементов соответствующего типа ('sub_type'). Элементы с указанным типом и идентификаторами должны существовать в домене.
Не применяется, если в 'sub_type' задано значение 'all'.

Поле: opts
Режим: in
Тип: object
Составное поле

Поле: opts.title
Режим: in
Тип: str
По умолчанию: empty

Произвольный заголовок

Поле: opts.comment
Режим: in
Тип: empty
По умолчанию: "

Произвольный комментарий

Поле: ext
Режим: inout
Тип: object
Составное поле

Позволяет расширять состав произвольными ключами и значениями

Поле: ext.ct
Режим: out
Тип: date
По умолчанию: generated

Время создания объекта

Поле: ext.lwt
Режим: out
Тип: date
По умолчанию: generated

Время последней модификации объекта

См. также