Во всех конфигурациях, созданных на базе БСП, применяются четыре стандартных шаблона для ограничения прав доступа к объектам на уровне записей:
В данной статье я рассматриваю основные возможности использования указанных шаблонов. Некоторые, специфические варианты применения рассматривать не буду по причине их кране редкого использования. При необходимости их можно посмотреть в описании приведенном на ИТС.
Перед прочтением, рекомендую посмотреть информацию про основные принципы реализации ограничений прав на уровне записей в типовых конфигурациях в этой статье. Здесь, я описываю исключительно применение типовых шаблонов, без подробного описания подсистемы в целом.
Под видами доступа в системе понимается набор различных видов объектов конфигурации, по объектам которых предполагается выполнять ограничение доступа на уровне записей. В типовых конфигурациях присутствует достаточно широкий набор видов доступа, например: «Пользователи», «Организации», «Склады», «Кассы», «ГруппыКонтрагентов», «Группы номенклатуры» и прочие. При необходимости можно достаточно легко добавить дополнительный, собственный вид доступа. А том как это сделать, подробно описано в этой статье. Статья написана для устаревшей версии БСП 2.2.2.44, но основные принципы остаются теми же.
Наиболее часто используемый шаблон. Применяется, когда необходимо ограничить доступ по каким либо реквизитам объекта.
Синтаксис шаблона:
#ПоЗначениям( "Документ.ПриобретениеТоваровУслуг","Чтение","",
"Организации","Организация",
"Склады","Склад",
"ГруппыПартнеров","Партнер",
"Подразделения","Подразделение", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
Значения всех параметров начиная с четвертого, это пары вид доступа – проверяемый реквизит объекта. Соответственно, шаблон поддерживает указание ограничений по 16 реквизитам объекта.
Проверяется соответствие реквизитов разрешенным значениям видов доступа для текущего пользователя. Для доступности объекта, разрешение должно быть найдено хотя бы в одной группе доступа, в которую включен пользователь, для всех указанных реквизитов одновременно. Также у пользователя должен быть доступ к данному объекту на уровне ролей.
Пример для выше приведенного ограничения доступа к документу «ПриобретениеТоваровУслуг»:
Для пользователя в настройках его групп доступа указаны следующие разрешения:
- Разрешены все организации
- Запрещены все склады кроме склада «Основной»
- Ограничение по группам партнеров не используется
- Разрешены все подразделения кроме подразделений: «Администрация», «Отдел закупок».
Следовательно, для данного пользователя будут доступны документы по складу «Основной», с подразделениями отличными от: «Администрация», «Отдел закупок».
В шаблоне #ПоЗначеним можно использовать конструкции на языке запросов для указания жестких отборов. Для этого используется специальный вид доступа «Условие»:
"Условие", "Т.ХозяйственнаяОперация <> Значение(Перечисление.ХозяйвственныеОперации.ЗакупкаПоИмпорту) ",…
Также, можно проверить доступ на уровне ролей, к объектам, на которые ссылаются реквизиты проверяемого объекта (это может быть владелец проверяемого объекта или любой другой реквизит). Для этого, в качестве вида доступа необходимо указать «ПравоЧтения» или «ПравоИзменения»:
#ПоЗначениям("Справочник.Файлы", "Чтение", "",
"ПравоЧтение", "Т.ВладелецФайла",…
Шаблон необходимо применять, когда набор требуемых для проверки значений может быть различным для каждого конкретного проверяемого элемента. Это могут быть журналы документов, объекты в которых проверяемые значения находятся в табличных частях или иные случаи. Во всех выше перечисленных случаях необходимо заранее подготовить и записать наборы значений доступа для каждого проверяемого объекта. Соответственно, для доступности объекта, все значения набора должны быть доступны хотя бы в одной из групп доступа пользователей.
Синтаксис шаблона:
#ПоНаборамЗначений( "Документ.УстановкаЦенНоменклатуры","Чтение","","")
В качестве четвертого параметра можно указать ссылку на объект, который будет являться владельцем набора значений доступа. По умолчанию, эта ссылка на текущий объект.
Для использования шаблона, у каждого проверяемого вида объектов должна быть добавлена специальная табличная часть «Наборы значений доступа». В данную ТЧ перед записью объекта, помещаются значения доступа, которые должны быть доступны водной из групп доступа пользователя.
Сама же логика формирования значений видов доступа должна быть реализована в экспортной процедуре модуля объекта «ЗаполнитьНаборыЗначенийДоступа».
Пример из документа «Установка цен номенклатуры»
Для Каждого СтрокаВидыЦен Из ВидыЦен Цикл
Строка = Таблица.Добавить();
Строка.ЗначениеДоступа = СтрокаВидыЦен.ВидЦены;
КонецЦикла;
Все добавленные значения доступа проверяются по логическому «И». Если необходимо использовать более сложную проверку, можно заполнить дополнительный реквизит табличной части «Номер набора». Значения доступа, объединенные в разные наборы проверяются по логическому «ИЛИ».
Пример.
Строка = Таблица.Добавить();
Строка.ЗначениеДоступа = ЗначениеДоступа1;
Строка.НомерНабора = 1;
Строка = Таблица.Добавить();
Строка.ЗначениеДоступа = ЗначениеДоступа2;
Строка.НомерНабора = 1;
Строка = Таблица.Добавить();
Строка.ЗначениеДоступа = ЗначениеДоступа3;
Строка.НомерНабора = 2;
Строка = Таблица.Добавить();
Строка.ЗначениеДоступа = ЗначениеДоступа4;
Строка.НомерНабора = 2;
Логика проверки будет следующей:
(ЗначениеДоступа1 И ЗначениеДоступа2) ИЛИ (ЗначениеДоступа3 И ЗначениеДоступа4)
Само же заполнение табличной части объекта происходит в подписке на событие перед записью объекта «ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей».
После этого в еще одной подписке на событие при записи объекта «ЗаписатьНаборыЗначенийДоступа», происходит перенос данных табличной части в специальный регистр сведений «Наборы значений доступа».
Шаблон #ПоНаборамЗначений при проверке разрешения на запись объекта, обращается к его табличной части, так как, если это новый объект, данных в регистре сведений еще нет. При проверке разрешения на чтение объекта, шаблон обращается к регистру сведений.
Шаблон #ПоЗначениямРасширенный
Шаблон #ПоЗначениям имеет одно серьезное ограничение – все заданные ограничения соединяются по логическому «И». Соответственно, нельзя указать такие условия, при которых объект будет доступен в случае доступности одного из нескольких указанных значений.
Для решения данной проблемы используется шаблон #ПоЗначениямРасширенный, который является расширенной версией шаблона #ПоЗначениям, и предоставляет возможности для применения логики «ИЛИ» для указания ограничений.
Синтаксис шаблона:
#ПоЗначениямРасширенный("Документ.ПеремещениеТоваров", "Чтение", "",
"Внутреннее Соединение Документ.ПеремещениеТоваров.Номенклатура КАК Т2 по Т.Ссылка = Т2.Ссылка",
"",
"Организации", "Т.Организация", "И(",
"Склады", "Т.СкладОтправитель", "ИЛИ",
"Склады", "Т.СкладПолучатель", ")И",
"ГруппыНоменклатуры", "Т2.Номенклатура", "", …)
Как видно из примера, присутствуют дополнительные параметры, в которых можно задать логические связи используемых ограничений. Для указанного примера, документ будет доступен, при доступности организации и одного из двух кладов: «Склад отправитель» или «Склад получатель».
Также, в расширенном шаблоне можно указать дополнительные таблицы, которые необходимы для проверки. Допустим, можно указать табличную часть документа:
Внутреннее Соединение Документ.ПеремещениеТоваров.Номенклатура КАК Т2 по Т.Ссылка = Т2.Ссылка
Реквизиты присоединенных таблиц также можно использовать в логике проверки доступности:
"ГруппыНоменклатуры", "Т2.Номенклатура", "", …
В случае с табличной частью, объект будет доступен, если будет доступен проверяемый реквизит (в данном случае «Номенклатура») хотя бы по одной строке.
Из-за того, что в шаблоне могут применяться дополнительные таблицы, требуется обязательное указания псевдонима основной таблицы «Т».
Шаблон #ПоЗначениямИНаборамРасширенный
Последний, используемый шаблон предоставляет весь функционал предыдущего шаблона, с добавлением функционала шаблона #ПоНаборамЗначений. По сути, это объединение всех возможностей предыдущих шаблонов. Данный шаблон является самым «тяжелым» с точки зрения производительности, по этому не рекомендуется его применять без действительной необходимости.
Для реализации возможностей шаблона #ПоНаборамЗначений используется специальный вид доступа «Объект», с указанием ссылки на владельца наборов значений доступа, которые необходимо проверить:
"Объект", "Т.Владелец" , "", …
В остальном, данный шаблон идентичен предыдущему шаблону.
На этом все. Если статья Вам понравилась, не забывайте поставить звездочку J.
Другие мои статьи по использованию механизмов БСП в типовых конфигурациях 1С
-
Использование подсистемы БСП "Заполнение объектов"
-
Новый подход к обмену данными EnterpriseData
-
EnterpriseData - часть 2. Процесс выгрузки данных
-
Пример доработки правил конвертации без использования КД 3.0