Skip to content

Latest commit

 

History

History
67 lines (50 loc) · 5.23 KB

File metadata and controls

67 lines (50 loc) · 5.23 KB

Модель прав ролей — что выдаётся, а что не существует

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

Основа — сплошной разбор файлов прав типовой конфигурации (порядка 1100 ролей) и ролей расширений в реальном внедрении. Проверено на выгрузке формата Rights версии 2.20.

Типы объектов без объектных прав

Тип Что означает пустой набор прав
Перечисление (Enum) прав не существует: доступность значений следует из прав на объекты, где перечисление используется
РегламентноеЗадание (ScheduledJob) настраиваемых прав доступа у объекта нет

При регистрации нового перечисления или регламентного задания права в роль не добавляются. Это не пропуск, а отсутствие такой сущности в модели прав.

Обратное тоже верно: запись <object><name>Enum.Имя</name>… в файле прав — сама по себе дефект, конфигуратор её отвергнет. role-validate.py называет это прямо (type 'Enum' has no object rights), а не «неизвестным типом»: вторая формулировка читается как пробел валидатора и провоцирует искать способ выдать право, которого нет.

Права на точки вызова сервисов

У HTTP- и веб-сервисов право Использование (Use) выдаётся не сервису целиком, а точке вызова — методу шаблона URL либо операции:

HTTPService.<ИмяСервиса>.URLTemplate.<ИмяШаблона>.Method.<ИмяМетода>
WebService.<ИмяСервиса>.Operation.<ИмяОперации>

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

Путь с двумя и более точками разбирается валидатором как вложенный объект, а вложенным объектам данных свойственны View/Edit. Для точек вызова сервисов это неверно — там Use. До версии, добавившей ENDPOINT_RIGHTS, валидатор выдавал предупреждение на единственно правильной форме записи.

Отсутствующий файл прав

Роль расширения может не иметь Ext/Rights.xml вообще — это валидное состояние пустой роли (ноль прав на любые объекты), а не потерянный файл. При первом добавлении прав файл создаётся с обязательной шапкой:

<Rights xmlns="http://v8.1c.ru/8.2/roles" ... version="2.20">
  <setForNewObjects>false</setForNewObjects>
  <setForAttributesByDefault>true</setForAttributesByDefault>
  <independentRightsOfChildObjects>false</independentRightsOfChildObjects>
  <object>…</object>
</Rights>

Три флага верхнего уровня обязательны; валидатор проверяет их наличие отдельно от прав.

Что остаётся настоящей находкой

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