Ограничения доступа к данным на основании табличных частей

Раздел содержит примеры ограничений доступа к данным на основании значений полей в табличных частях. Для ознакомления с разделом также полезна информация из разделов:

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

  1. Разрешить доступ к объекту, если условие доступа выполняется хотя бы для одной записи табличной части.
  2. Разрешить доступ к объекту, если условие доступа выполняется для всех записей табличной части.
  3. Разрешить доступ к объекту, если условие доступа выполняется для всех записей табличной части или табличная часть пустая.

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

Условие доступа выполняется хотя бы для одной записи табличной части

Копировать в буфер обмена
Справочник1
ГДЕ Справочник1.ТабличнаяЧасть1.Объект В
(
    ВЫБРАТЬ
        РегистрПрав.Объект
    ИЗ
        РегистрСведений.ПраваПользователей КАК РегистрПрав
    ГДЕ
        РегистрПрав.Пользователь = &ТекущийПользователь
)

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

Условие доступа выполняется для всех записей табличной части

Копировать в буфер обмена
Справ1 ГДЕ (НЕ Справ1.Ссылка В
    (ВЫБРАТЬ ПЕРВЫЕ 1
        Спрв1.Ссылка
    ИЗ
        Справочник.Справочник1 КАК Спрв1
        ЛЕВОЕ СОЕДИНЕНИЕ
        Справочник.Справочник1.ТабличнаяЧасть1 КАК ТЧ1
        ПО Спрв1.Ссылка = ТЧ1.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ
        РегистрСведений.ПраваПользователей КАК РегистрПрав
        ПО
        ТЧ1.Объект = РегистрПрав.Объект И РегистрПрав.Пользователь = &ТекущийПользователь
    ГДЕ
        Спрв1.Ссылка = Справ1.Ссылка
        И РегистрПрав.Объект ЕСТЬ NULL ))

В результате этого ограничения будут доступны только те элементы справочника Справочник1 в все записи табличных частей ссылаются на разрешенные объекты.

Условие доступа выполняется для всех записей табличной части или табличная часть пустая

Копировать в буфер обмена
Справ1 ГДЕ (НЕ Справ1.Ссылка В
    (ВЫБРАТЬ ПЕРВЫЕ 1
        ТЧ1.Ссылка
    ИЗ
        Справочник.Справочник1.ТабличнаяЧасть1 КАК ТЧ1
        ЛЕВОЕ СОЕДИНЕНИЕ
        РегистрСведений.ПраваПользователей КАК РегистрПрав
        ПО
        ТЧ1.Объект = РегистрПрав.Объект И РегистрПрав.Пользователь = &ТекущийПользователь
    ГДЕ
        ТЧ1.Ссылка = Справ1.Ссылка
        И РегистрПрав.Объект ЕСТЬ NULL ))

Ограничение позволит выполнить обращение только к тем элементам справочника Справочник1, табличные части которых пустые или содержат ссылки только на разрешенные объекты.