Правила разработки ролей
Источники
Настройка ролей и прав доступа
Установка прав для новых объектов и полей объектов
Использование привилегированного режима
Ограничения на использование ключевого слова "РАЗРЕШЕННЫЕ" в запросах
Основные правила
Для аналитиков и программистов
Право | Правила | Примеры |
---|---|---|
Роли создаются «атомарными» | т.е. дающими права на доступ к элементарным функциям программы. Из этих элементарных ролей создаются профили пользователей, которые уже и назначаются пользователям средствами БСП. Деление прав на доступ к объектам между функциями должно быть таким, чтобы на типовом внедрении не возникало необходимости в создании новых ролей. |
|
Неограниченный доступ | Роль ПолныеПрава (англ. FullAccess) совместно с ролью АдминистраторСистемы (англ. SystemAdministrator) дает (без RLS) ко всем объектам. |
|
Интерактивное удаление ссылочных объектов | Ни одна роль (в т.ч. ПолныеПрава и АдминистраторСистемы) не должна давать право на интерактивное удаление ссылочных объектов.
|
|
Удаление ссылочных объектов | Только роль ПолныеПрава и АдминистраторСистемы должна давать право на удаление ссылочных объектов. |
|
Устанавливать права для новых объектов | Только для роли ПолныеПрава должен быть установлен флаг «Устанавливать права для новых объектов». Для всех остальных ролей этот флаг должен быть снят. При добавлении новой роли, флажок «Устанавливать права для реквизитов и табличных частей по умолчанию» должен быть установлен, а флажок «Независимые права подчиненных объектов» должен быть снят. При необходимости установить в роли права только на поля какого-либо объекта метаданных (права просмотр, редактирование на реквизиты, табличные части, измерения, команды и т.п. без этих прав на сам объект), предварительно требуется следующее. В роли установить флажок «Независимые права подчиненных объектов», а флажок «Устанавливать права для реквизитов и табличных частей по умолчанию» снять с очисткой прав на все реквизиты и табличные части. При добавлении в конфигурацию новых объектов или новых полей существующих объектов следует настроить права на эти объекты или поля в соответствующих ролях. |
|
Право для администратора | Если какое-то право может быть использовано только администратором системы (например, использование какого-то отчета, обработки, константы), то достаточно, чтобы это предоставлялось одной из ролей ПолныеПрава и АдминистраторСистемы, создавать отдельные роли в этом случае не требуется. |
|
Общие права | Не должно быть ролей, кроме стандартных ролей БСП, которые дают общие права (такие как Администрирование, ТонкийКлиент, Толстый клиент, Интерактивное открытие внешних обработок и т.п.).
|
|
Чтение, Просмотр, Ввод по строке | В отдельных случаях для неконфиденциальных данных и общедоступных функций не требуется создавать отдельную роль на чтение (а также просмотр и ввод по строке - для ссылочных данных), а следует включать эти права в роли БазовыеПрава<ИмяБиблиотеки> (англ. BasicAccess<LibraryName>) и БазовыеПраваВнешнихПользователей<ИмяБиблиотеки> (англ. BasicAccessExternalUser<LibraryName>) (эта роль необходима только если в конфигурации предусмотрена работа с внешними пользователями).
| Например, это константы, общенациональные классификаторы, общие формы выбора периода, ввода контактной информации и др. так же:
|
Права на объекты разных подсистемам | Не допускается, чтобы одна роль давала права на объекты, которые относятся к другим подсистемам. | Например, в хранилище УП (ERP) нельзя, чтобы одна роль давала права на объекты, которые есть в УТ 11 и на объекты, которых в УТ 11 нет. |
Права на объекты одной функции | Объекты необходимо объединить в элементарные функции. Если объекты входят в одну функцию, то это означает, что не может быть задачи, когда доступ к этим объектам может быть разный. В случае если возникают сомнения в том, что два объекта могут быть отнесены к одной элементарной функции, лучше выделить их в разные. Каждый объект должен быть отнесен к элементарной функции, и только к одной. Объекты, относящиеся к разным библиотекам не могут быть отнесены к одной элементарной функции. | Пример: Противоположный пример: |
Обязательные роли | В конфигурации должны быть определены три обязательные роли устанавливаться как основные роли конфигурации (свойство ОсновныеРоли): Для функций, включающих в себя ссылочные объекты и независимые регистры сведений, должно быть создано две роли
Роли должны содержать следующие права (когда они имеются у объекта метаданных):
| Необходимо помнить, что для регистров, подчиненных регистратору, обычно не требуется назначать права на изменение |
Право на Просмотр Подсистемы | Для каждой подсистемы верхнего уровня должна быть создана роль Подсистема<ИмяПодсистемы> (англ. Subsystem<SubsystemName>), дающая право на просмотр Если интерфейс подсистемы организован так, что часть настроек и справочников отображаются в отдельной форме, то роль, дающая право на подсистему, должна включать права на просмотр этой формы (например, в УП(ERP) часть справочников в разделах командного интерфейса не вынесены и отображаются в форме, вызываемой командой «Настройки и справочники»). |
|
Дополнительные права, не связанные с доступом к объектам | В случае если возникает необходимость давать пользователям какие-то дополнительные права, не связанные с доступом к объектам, нужно создавать роль <НаименованиеПрава>, не дающую доступ ни к одному объекту. При этом в наименовании не нужно использовать слово «Право». В коде конфигурации нужно проверять наличие у пользователя этой роли. Пользователь с ролью ПолныеПрава должен проходить проверку без необходимости включения в его профиль этой роли. Для проверки следует использовать функцию БСП Пользователи.РолиДоступны. Использование других механизмов, кроме проверки наличия роли (или какого-то права) при реализации дополнительных прав пользователя, не допускается. | Пример: |
Права для внешних пользователей | Роли, предназначенные исключительно для предоставления прав доступа внешним пользователям (представленным в программе одним из объектов, например, элементами справочников Сотрудники, Партнеры, Физические лица и др.), следует называть с определенным префиксом. | Например, префикс Самообслуживание для доступа к рабочему месту по самообслуживанию клиентов в торговом решении:
|
Права к устаревшим объектам | Устаревшие объекты метаданных с префиксом Удалить должны быть исключены из всех ролей, кроме ролей ПолныеПрава или АдминистраторСистемы. |
|
Роли в расширениях конфигурации | При разработке расширений конфигурации не рекомендуется заимствовать и изменять роли АдминистраторСистемы и ПолныеПрава. Вместо этого необходимо добавить в расширение собственные роли по следующему принципу. В простейшем случае, если права на все объекты расширения одинаковы для всех категорий пользователей, то создать одну роль с указанным именем, настроить в ней необходимые права на объекты расширения и включить ее в основные роли расширения:
Если права на объекты расширения различаются для администратора и пользователей, то создать две роли с именами:
Если права на объекты расширения различаются для администратора, пользователей и внешних пользователей (см. подробнее документацию Библиотеки стандартных подсистем), то создать три роли с именами:
|
|
Профили в расширениях конфигурации | В конфигурациях на базе Библиотеки стандартных подсистем роли расширений из пп. 6.1-6.3 автоматически включаются в профили групп доступа при установке расширений в информационную базу:
Кроме того, если в расширении требуются гибкая настройка прав доступа, то следует дополнительно спроектировать и создать любые необходимые прикладные роли. При этом такие роли не включаются в профили групп доступа автоматически, но возможно программно дополнить ими поставляемые профили или интерактивно назначить их в справочнике Профили групп доступа. В конфигурациях без использования Библиотеки стандартных подсистем (или без использования профилей) роли расширений следует аналогично назначать пользователям ИБ программно средствами встроенного языка или интерактивно. Тем самым, разработанное расширение конфигурации может быть единообразно, без каких-либо доработок состава ролей, подключено в конфигурации как на базе Библиотеки стандартных подсистем, так и без нее. |
|
Для программистов
Право | Правила | Примеры |
---|---|---|
Привилегированный режим | Привилегированный режим позволяет
1.2. Привилегированный режим следует использовать
В то же время, неоправданное использование привилегированного режима может привести к проблемам безопасности пользовательских данных. |
|
Привилегированный режим при проведении» и «Привилегированный режим при отмене проведения» | Во всех документах, предполагающих проведение, должны быть выставлены флаги «Привилегированный режим при проведении» и «Привилегированный режим при отмене проведения», поэтому не нужно создавать роли, дающие права на изменение регистров, подчиненных регистраторам. Исключение: документы, предназначенные для непосредственной корректировки записей регистров, могут проводиться с проверкой прав доступа, но в этом случае необходимо предусмотреть роли, дающие права на изменение регистров. |
|
Привилегированный режим при получении | Во всех функциональных опциях должны быть выставлены флаги «Привилегированный режим при получении». Исключение: в конфигурации могут быть предусмотрены параметризированные ФО, для которых разработчик специально предусматривает различия в получаемых значениях пользователями с разными правами. | Пример: Есть параметризованная ФО ИспользоватьВалютуПриРасчетеСПерсоналом, которая параметризуется организацией. Если пользователь будет получать ее значение в контексте своих прав, то он не увидит поле «валюта» в документе, если у него нет ни одной организации, где применяется валютный учет. |
Большое количество ролей в конфигурации (от нескольких десятков) | В случае большого количества ролей в конфигурации (от нескольких десятков) не рекомендуется использовать ролевую настройку видимости в элементах форм (просмотр и редактирование реквизитов по ролям, пользовательскую видимость полей формы по ролям, использование команд по ролям). Вместо этого следует придерживаться следующих подходов:
Не рекомендуется использовать ролевую настройку видимости в командном интерфейсе конфигурации, командном интерфейсе основного раздела, а также рабочей области начальной страницы. Вместо этого следует использовать настройку прав на разделы командного интерфейса, общие формы и объекты, включенные в командный интерфейс или в рабочую область. Это позволяет повысить предсказуемость поведения управляемого интерфейса для пользователя, а также упростить расследование ошибок. |
|
Проверка прав ролей с доступом к объектам | Для проверки прав доступа в коде следует использовать метод ПравоДоступа. Такой подход позволяет повысить устойчивость кода к пересмотру состава ролей в конфигурации.
| Например, неправильно: Если РольДоступна("ДобавлениеИзменениеСтранМира") Тогда ... правильно: Если ПравоДоступа("Редактирование", Метаданные.Справочники.СтраныМира) Тогда ... |
Проверка прав ролей без доступа к объектам | В тех случаях, где роль не дает никаких прав на объекты метаданных, а служит только для определения того или иного дополнительного права, следует использовать метод РольДоступна. При использовании в конфигурации Библиотеки стандартных подсистем (БСП) следует использовать функцию РолиДоступны общего модуля Пользователи | Пример проверки дополнительных ролей, без использования БСП: Если РольДоступна(...) Или <ЭтоПолноправныйПользователь> Или ПривилегированныйРежим() Тогда ... Либо аналогичная проверка с использованием БСП: Если Пользователи.РолиДоступны(...) Тогда ... |
ключевого слова "РАЗРЕШЕННЫЕ" в запросах | Для исключения возникновения ситуаций с нарушением прав доступа различным подсистемам конфигурации необходимо предоставить доступ не к ограниченной, а ко всей требуемой информации | Например, если использовать ключевое слово РАЗРЕШЕННЫЕ в запросах механизмов определения списания себестоимости товаров при их отгрузке со склада, то себестоимость списания одного пользователя может отличаться от себестоимости другого. В данном случае необходимо поддерживать целостность информации и либо разрешать пользователю чтение информации для корректного отражения хозяйственной операции, либо конфигурация должна прекращать выполнение операции с сообщением о нарушении прав доступа. Другой пример: если у пользователя отсутствует доступ к контактной информации контактных лиц контрагентов, то пользователь ее не увидит. Данная информация не задействована в бизнес-процессах заложенных в конфигурацию. Ограничение доступа к ней не повлияет на работу конфигурации в целом. |
производительность при изменении значений параметров сеанса и функциональных опций | В процессе работы система формирует специальный кеш запросов ограничений доступа к данным, создаваемый для того, чтобы повысить производительность запросов получения данных при использовании ограничений. Ограничения доступа к данным могут использовать параметры сеанса и функциональные опции. В кеш попадают запросы ограничения доступа с установленными значениями параметров сеанса и функциональных опций. Однако, при изменении значений параметров сеанса или функциональных опций, которые используются в запросах ограничения доступа к данным, происходит очистка накопленного кэша запросов, что приводит к существенному снижению производительности запросов к данным. Поэтому рекомендуется выполнять установку значений параметров сеанса "по требованию", в обработчике УстановкаПараметровСеанса модуля сеанса. Также не рекомендуется часто выполнять изменение значений функциональных опций в процессе работы системы. |
|