Заметки из Зазеркалья

09.03.2016

Развитие механизма расширений

Реализовано в версии 8.3.9.1818.

Как мы и обещали в предыдущей статье, мы постепенно наращиваем функциональность механизма расширений и улучшаем диагностику их работоспособности.

Добавление собственных ролей

Раньше существовала возможность изменять роли типовой конфигурации, заимствуя их и добавляя в них объекты, созданные в расширении. Теперь в расширениях вы можете создавать собственные роли.

Мы видим два основных сценария использования собственных ролей. Во-первых, они могут потребоваться для создания атомарных или комплексных наборов прав на те объекты, которые расширение привносит в конфигурацию. Без какой-либо привязки к уже существующим в конфигурации ролям.

Во-вторых, с их помощью можно создавать атомарные или комплексные наборы прав на объекты конфигурации, которые учитывают специфику доработки.

Роли, созданные в расширениях, вы можете добавить пользователю только программно. Например, таким образом:

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

В конфигураторе вы можете удалить роли пользователя, которые добавлены ему расширениями. Но не по-одиночке, а только все вместе. Для этого у пользователя на вкладке Прочее появился пункт Роли, добавленные расширениями конфигурации. Для удаления ролей нужно снять отметку с этого пункта.

Если добавившее роль расширение в какой-то момент перестаёт проходить проверку применимости и становится неактивным, то роль, добавленная из него, продолжает быть доступной через коллекцию РолиПользователя как обычный объект метаданных. С помощью встроенного языка вы можете удалить её из ролей пользователя, или добавить в набор ролей другого пользователя.

Если же вы удаляете расширение, то все добавленные им роли также удаляются из списков ролей пользователей.

Расширение ролей конфигурации

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

Эта возможность позволит вам, во-первых, создавать комплексные наборы прав на объекты конфигурации и расширения, которые будут учитывать специфику доработки, и будут привязаны к уже существующим в конфигурации ролям.

А во-вторых, расширение ролей конфигурации позволит уменьшить набор прав ролей конфигурации, с учётом специфики доработки.

При редактировании прав на заимствованный объект теперь вам доступно переключение флажка в третье состояние – Используется значение из расширяемой роли. Все права на заимствованные объекты по умолчанию имеют именно такое значение. И для заимствованной роли над списком прав мы добавили кнопку Затенить все флажки, которая устанавливает все флажки в третье состояние.

Также при редактировании заимствованной роли в названия флагов, которые расположены в нижней части окна, добавляется слово «собственных»:

  • Устанавливать права для новых собственных объектов;
  • Устанавливать права для собственных реквизитов и табличных частей по умолчанию.

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

Ограничения собственных и заимствованных ролей

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

С другой стороны собственные роли расширения могут быть ограничены настройками профилей безопасности кластера. Эта возможность, по нашему мнению, будет востребована в конфигурациях, работающих в модели сервиса. С её помощью вы можете создать роль, дающую доступ ко всем объектам конфигурации, за исключением тех, которые отвечают за сервисные и административные функции. Такую роль вы назначаете ролью, ограничивающей расширение прав доступа для профиля безопасного режима и для профилей, назначаемых конкретным расширениям.

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

Для того чтобы реализовать эти возможности, мы добавили в профиль безопасности, в группу Разрешен полный доступ, флаг к расширению прав доступа. Кроме этого мы добавили поле Роли, ограничивающие расширение прав доступа. С помощью этого поля как раз можно задать перечень ролей, разделённых символом ";".

Если при работе расширения действует профиль, то платформа интерпретирует новые параметры следующим образом.

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

Если значение поля не указано, и не установлен флаг полного доступа, то расширение прав на объекты конфигурации не производится. При этом у вас сохраняется возможность снять некоторые права на объекты.

Если выясняется, что при запуске расширения профиль безопасности ограничивает предоставление некоторого права некоторой ролью, содержащейся в расширении, то пользователь получит сообщение такого вида: «Право "НекотороеПраво" на объект "НекоторыйОбъект" для роли "НекотораяРоль" ограничено профилем безопасности».

Проверка возможности применения

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

Первая проблема легко решается ещё до запуска с помощью проверки модулей расширения. А вот о второй проблеме вы могли узнать только после запуска приложения и подключения расширения. Если в этот момент что-то не так с объектами, к которым выполняется обращение, то платформа сообщала об этом и не подключала расширение.

Для того чтобы снизить трудоёмкость разработки расширений, мы проанализировали сложившуюся ситуацию, немного изменили поведение системы, и реализовали ряд проверок.

Теперь новые средства диагностики позволят вам проверить применимость расширений ещё до их реального запуска вместе с конфигурацией.

При запуске клиентского приложения

Изменение поведения заключается в том, что теперь, в процессе запуска клиентского приложения, прежние сообщения о проблемах подключения больше не выводятся. В новой реализации, если при подключении расширения в процессе запуска диагностировались ошибки, платформа выводит всплывающее окно оповещения с сообщением-гиперссылкой.

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

Все подобные ошибки вы можете теперь диагностировать заранее и в разных местах.

В Конфигураторе

Первое место, в котором доступна диагностика, это конфигуратор. Здесь, в окне Расширения конфигурации мы добавили две новых команды: Проверка возможности применения и Проверка возможности применения всех расширений.

Эти команды проверяют применимость выбранного расширения (или всех расширений) к данной информационной базе. При этом проверка учитывает даже те изменения в расширениях и конфигурации, которые выполнены, но не применены к информационной базе.

Аналогичную проверку вы можете выполнить и при пакетном запуске конфигуратора. Для этого мы добавили новый параметр командной строки /CheckCanApplyConfigurationExtensions.

Во встроенном языке

Второе место, в котором вам доступна такая диагностика, это встроенный язык. В МенеджерРасширенийКонфигурации мы добавили новый метод ПроверитьВозможностьПримененияВсех(). А в объект РасширениеКонфигурации - метод ПроверитьВозможностьПрименения(). С помощью этих методов вы можете проверить применимость всех (или одного) расширений информационной базы в текущей области данных по порядку загрузки с учётом уже участвовавших в проверке расширений.

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

В стандартной обработке «Управление расширениями конфигурации»

И, наконец, последнее место, где доступна новая диагностика, это стандартная обработка Управление расширениями конфигурации. Здесь мы добавили флажок Проверять применимость при добавлении и загрузке расширений. Если он установлен, а по-умолчанию это так, то применимость будет проверяться перед добавлением или перед загрузкой расширения.

Кроме этого в меню Еще мы добавили две команды, которые позволят вам проверить применимость тех расширений, которые уже имеются в списке.


Теги: расширения  8.3.9