Перейти к основному содержимому
Версия: 7.0

Security

Securityсистемный модуль, задающий модель управления доступом: роли пользователей, назначение ролей, права на свойства, действия, группы свойств и элементы навигатора, настройки форм и клиента по ролям, ограничения памяти клиента и форму поиска по навигатору. Он лежит в основе управленческой статьи Политика безопасности, интерфейс ролей и доступа которой построен на объявленных здесь классах, свойствах и формах. Подключается через REQUIRE Security (System, SystemEvents, Email и Utils тянутся автоматически как его зависимости).

Роли

Роль объединяет набор прав и настроек, которые затем применяются к назначенным ей пользователям.

Класс / свойствоЧто это
UserRoleкласс роли
name[UserRole]имя роли (ISTRING[100])
sid[UserRole]код роли (STRING[30]), устойчивый идентификатор для поиска роли
userRoleSID[STRING]роль с указанным sid
disableRole[UserRole]признак отключения прав роли без её снятия с пользователей
copy[UserRole, UserRole]абстрактное действие, копирующее настройки одной роли в другую (расширяется каждым блоком настроек ниже); базовая реализация задаёт имя и код целевой роли как значения исходной с суффиксом _copy
copy[UserRole]создаёт новую роль, наполняет её через copy[UserRole, UserRole] и активирует на форме securityPolicy

Роль нельзя удалить, пока она назначена хотя бы одному пользователю (CONSTRAINT на DROPPED).

Назначение ролей

У пользователя есть одна главная роль и любое число дополнительных; итоговая принадлежность объединяет обе.

СвойствоЧто возвращает
mainRole[User]главная роль пользователя
nameMainRole[User] / sidMainRole[CustomUser]имя / код главной роли
currentUserMainRoleName[]имя главной роли текущего пользователя
overIn[User, UserRole]абстрактный признак принадлежности; базовая реализация добавляет главную роль (mainRole(user) == role)
in[CustomUser, UserRole]явное назначение дополнительной роли
has[User, UserRole]итоговая принадлежность — in[CustomUser, UserRole] или overIn[User, UserRole] (материализованная)
userRoles[User]имена всех ролей пользователя через запятую, по порядку имени
firstRole[User]роль с наименьшим номером, отличная от default, иначе роль default
rolesCount[User]число ролей пользователя

Системные роли

createSystemUserRoles[] создаёт четыре встроенные роли, если их нет, определяя их по sid:

sidИмяНачальные права
adminАдминистраторпоказ расширенного описания; разрешение на папку навигатора System.root и права просмотра / изменения / редактирования объекта на группу свойств System_root
readonlyТолько чтениезапрет права изменения на группу свойств System_root
defaultПо умолчаниюбез начальных прав
selfRegisterСамостоятельная регистрациязапрет на System.root, разрешение на папку Authentication.account

Назначение привязано к событиям пользователя: при создании пользователя (SETCHANGED на User) назначается роль default, а при логине admin — ещё и роль admin; при самостоятельной регистрации (onUserRegister) назначается роль selfRegister.

Права

Доступ выражается перечислимым классом Permission со значениями permit, forbid, default. Право хранится по роли на трёх видах целей — группа свойств (PropertyGroup), отдельное действие или свойство (ActionOrProperty) и элемент навигатора (NavigatorElement) — и наследуется вниз по их иерархиям родителей.

Хранимое значение — dataPermission…[UserRole, …]; итоговое значение permission…[UserRole, …] равно хранимому, а при его отсутствии — nearestParentPermission…, праву ближайшего предка в дереве групп / элементов, у которого право задано (GROUP LAST … ORDER DESC level). captionPermission… — отображаемое право (по умолчанию Permission.default); foregroundPermission… гасит унаследованные ячейки, а backgroundPermission… помечает родителя, у потомков которого право отличается.

Доступ к свойствам делится на четыре типа прав, порождаемых метакодом @initPropertyPermission как для группы свойств, так и для действия или свойства:

ТипПодписьЧто определяет
viewПросмотротображается ли свойство
changeИзменениеможно ли изменить значение свойства
editObjectsРедактирование объектаможно ли перейти к объекту, выступающему значением свойства
groupChangeГрупповое изменениеможно ли изменить свойство для группы объектов

Каждый тип даёт параллельное семейство свойств, например dataPermissionView[UserRole, PropertyGroup], permissionView[UserRole, ActionOrProperty], captionPermissionView[UserRole, ActionOrProperty]. При более чем 100 изменениях в одной транзакции сбрасывается кеш политики безопасности роли вместо обновления каждой записи по отдельности.

Доступ к навигатору использует ту же модель с единственным правом (dataPermission[UserRole, NavigatorElement], permission[UserRole, NavigatorElement], captionPermission[UserRole, NavigatorElement] с подписью Доступ). Итоговый доступ по пользователю — permit[User, NavigatorElement]: элемент разрешён, когда его разрешает какая-либо включённая роль пользователя или когда его не запрещает ни одна включённая роль.

Настройки форм и клиента

Эти признаки задаются по роли и объединяются по ролям пользователя.

СвойствоЧто делает
forbidDuplicateForms[UserRole]открывать единственный экземпляр уже открытой формы вместо нового окна
dataForbidDuplicateForms[CustomUser]то же ограничение, заданное для отдельного пользователя
autoReconnectOnConnectionLost[UserRole]автоматически переподключать клиент после потери связи
showDetailedInfo[UserRole]показывать всплывающее расширенное описание свойств и элементов
maximizeDefaultForms[UserRole]открывать клиент на весь экран (с скрытым навигатором) при запуске

Формы по умолчанию

defaultNumber[UserRole, NavigatorElement] задаёт номер порядка при запуске для элемента навигатора по роли; defaultNumber[User, NavigatorElement] берёт минимум по ролям пользователя. defaultForms[UserRole] перечисляет подписи форм роли по умолчанию в этом порядке. mobileOnly[UserRole, NavigatorElement] (значение YesNo, показываемое через captionMobileOnly) ограничивает форму по умолчанию только мобильным или только настольным клиентом.

showDefaultForms[] открывает эти формы по порядку при запуске клиента — выполняя каждое действие навигатора или показывая каждую форму через SHOW … NOWAIT — и разворачивает окно, если maximizeDefaultForms задан для любой из ролей текущего пользователя. Выполняется при запуске настольного и веб-клиента (onDesktopClientStarted, onWebClientStarted).

Метакод @addRoleApplicationSetting — точка расширения, объявляющая дополнительное свойство-настройку по роли, размещающая его на панели настроек формы securityPolicy и расширяющая copy[UserRole, UserRole], чтобы её переносить.

Запуск клиента и память

initHeapSize[], maxHeapSize[], minHeapFreeRatio[], maxHeapFreeRatio[] и vmargs[] хранят параметры JVM, передаваемые запускающему настольный клиент.

Класс MemoryLimit именует набор параметров запуска — name[MemoryLimit], maxHeapSize[MemoryLimit], vmargs[MemoryLimit] — для готового варианта запуска клиента. generateJnlpUrls[] строит в exportText[] HTML-список ссылок запуска настольного клиента, по одной на каждый MemoryLimit, с её размером кучи и аргументами JVM.

Поиск по навигатору

Форма findNavigator показывает навигатор деревом и позволяет вводить в findText[] текст для отбора элементов, в подпись которых он входит и которые текущему пользователю разрешено открывать (permit[User, NavigatorElement]); openForm[NavigatorElement] показывает выбранную форму (SHOW … NOWAIT). Добавляется в системное окно навигатора как пункт поиска.

Расширения рефлексии

Модуль расширяет форму рефлексии forms показателями по ролям: countUserPreferences[GroupObject, UserRole] считает пользователей роли, сохранивших настройки для группового объекта, а countUser[PropertyDraw, UserRole, PropertyDrawShowStatus] считает пользователей роли по статусу показа отрисовки свойства. captionShow[PropertyDraw, UserRole] сводит эти счётчики; hide[PropertyDraw, UserRole], columnSort[PropertyDraw, UserRole] и dropSort[PropertyDraw, UserRole] применяют или сбрасывают соответствующую настройку для каждого пользователя роли.

Формы

ФормаНазначение
securityPolicyосновная форма политики безопасности: роли с их настройками, деревья элементов навигатора и свойств с колонками прав, а также пользователи роли
propertyPolicyполитика отдельного свойства (журналирование, обязательность, список выбора, выбор) и его права по ролям
actionPolicyправа отдельного действия по ролям
userRolesDialogдиалог выбора роли
findNavigatorформа поиска по навигатору

Язык

  • Оператор META — механизм метакода, стоящий за порождаемыми семействами прав на свойства (@initPropertyPermission) и точкой расширения настроек по роли (@addRoleApplicationSetting).

Связано

  • Политика безопасности — управленческая статья о настройке ролей и доступа; данный модуль служит её основой из стандартной библиотеки.
  • System modules — общий список модулей платформы.
  • Authentication — пользователи, контакты и вход в систему, чьим классам User / CustomUser назначаются роли.
  • Reflection — метаданные о навигаторе, формах и свойствах, на которые задаются права.