Версия для печати темы (https://pro1c.org.ua/index.php?s=46459a7aae7ef3bfd8e081c95fdcb007&showtopic=205)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Прочее _ Ограничения доступа к данным. Сведения о принципах функционирования

Автор: Batchir 09.02.09, 20:53

В этом документе представлена систематизированная информация о функционировании механизма ограничений прав доступа к данным на уровне записей.

Общие замечания

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

Ключевое слово "РАЗРЕШЕННЫЕ" в языке запросов. (См. раздел "Работа с запросами" книги "Описание встроенного языка. Часть 2").

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

Ограничения доступа

Ограничения доступа к данным могут накладываться на чтение или изменение объектов базы данных. Текущий пользователь имеет право прочитать или изменить некоторый объект базы данных только в том случае, если ограничение доступа предоставляет ему такое право. В противном случае операция чтения или изменения этого объекта базы данных выполнена не будет.

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

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

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

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



ГДЕ
Наименование = "Кирпичный завод"

или

ГДЕ
Продукция.Наименование = "Кирпич красный"


где "Продукция" - это табличная часть справочника "Контрагенты".



ГДЕ
ОсновнойМенеджер.Код = "Иванов"

или

ГДЕ
ОсновнойМенеджер.ФизическоеЛицо.Наименование = "Петровский"




Контрагенты
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
ПО Контрагенты.ОсновнойМенеджер.Наименование = Пользователи.Наименование
ГДЕ
Пользователи.ФизическоеЛицо.Наименование = "Петровский"


в котором используются поля элементов справочника "Пользователи", связанных с данным элементом справочника "Контрагенты" по значению полей "Наименование".



Контрагенты
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Пользователи.Наименование, Пользователи.ФизическоеЛицо
ИЗ
Справочник.Пользователи КАК Пользователи
ГДЕ
Пользователи.Код > "Петечкин") КАК Пользователи
ПО Контрагенты.ОсновнойМенеджер.Наименование = Пользователи.Наименование
ГДЕ
Пользователи.ФизическоеЛицо.Наименование = "Петровский"


Далее приведен пример ограничения на чтение из справочника "ПаспортныеДанныеФизЛиц", в котором вложенный запрос используется в качестве операнда операции сравнения В:



ПаспортныеДанныеФизЛиц
ГДЕ
ПаспортныеДанныеФизЛиц.ФизЛицо В (ВЫБРАТЬ РАЗЛИЧНЫЕ
Работники.ФизЛицо КАК ФизЛицо
ИЗ
РегистрСведений.Работники КАК Работники)


Важно, что результаты вложенных запросов, которые используются в ограничении, не должны содержать табличных частей. Если во вложенном запросе необходимо получить данные из табличной части, то в разделе ИЗ вложенного запроса необходимо обращаться непосредственно к табличной части. Например, вместо:



ВЫБРАТЬ Ссылка КАК Ссылка, Продукция.Наименование КАК НаименованиеПродукции
ИЗ Справочник.Контрагенты


в качестве запроса, вложенного в ограничение, следует использовать:



ВЫБРАТЬ Ссылка КАК Ссылка, Наименование КАК НаименованиеПродукции
ИЗ Справочник.Контрагенты.Продукция



ГДЕ
Владелец.ДоступКУчетнойЗаписи.Пользователь = &ТекущийПользователь И
Владелец.ДоступКУчетнойЗаписи.Администрирование = ИСТИНА

где "ТекущийПользователь" - это параметр сеанса.


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

Действия ограничения доступа

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

Ограничения доступа к данным накладываются на объекты базы данных в момент обращения 1С:Предприятия к базе данных. В клиент-серверном варианте 1С:Предприятия наложение ограничений выполняется на сервере 1С:Предприятия.

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

В запросах способом действия ограничений доступа к данным можно управлять. Для этого в языке запросов предусмотрено ключевое слово РАЗРЕШЕННЫЕ. Если в запросе не указано "РАЗРЕШЕННЫЕ", то ограничения действуют способом "все". Если слово РАЗРЕШЕННЫЕ указано, то выбирается способ "разрешенные".

Важно, что если в запросе не указано ключевое слово "РАЗРЕШЕННЫЕ", то все отборы, заданные в этом запросе, не должны противоречить ни одному из ограничений на чтение объектов базы данных, используемых в запросе. При этом, если в запросе используются виртуальные таблицы, то соответствующие отборы должны быть наложены и на сами виртуальные таблицы. Например:


ВЫБРАТЬ
КонтактнаяИнформацияСрезПервых.Представление
ИЗ
РегистрСведений.КонтактнаяИнформация.СрезПоследних(, Тип = &Тип) КАК КонтактнаяИнформацияСрезПервых
ГДЕ
КонтактнаяИнформацияСрезПервых.Тип = &Тип


Механизм наложения ограничений.

Любая операция над данными, хранимыми в базе данных, в 1С:Предприятии 8.1 в конечном счете приводит к обращению к базе данных с некоторым запросом на чтение или изменение данных. В процессе исполнения запросов к базе данных внутренними механизмами 1С:Предприятия происходит наложение ограничений доступа. При этом
Способ "все"

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

Способ "разрешенные"

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

Другие объекты, связанные с ограничениями доступа к данным

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

Параметры сеанса

Параметры сеанса являются объектами метаданных, имеют смысл поименованных значений и могут использоваться в ограничениях доступа к данным аналогично тому, как в запросе могут использоваться параметры запроса. Параметры сеанса рекомендуется использовать в ограничениях доступа вместо литералов и списков литералов (в операторах сравнения В и НЕ В). Кроме того, они могут использоваться в конфигурациях и для других целей, когда необходимо хранить информацию, характеризующую сеанс 1С:Предприятия.

Следует разделять области применения параметров сеанса и глобальных переменных модуля приложения (модуля внешнего соединения). Среди основных отличий параметров сеанса:
  • ОписаниеТипов;
  • ссылки на объекты базы данных;
  • УникальныйИдентификатор;
  • ФиксированныйМассив, элементами которого могут быть значения перечисленных типов, включая ФиксированныйМассив. ФиксированныйМассив не допускает никаких изменений своего содержимого и может быть сконструирован из объекта типа "Массив";
  • ВидДвиженияНакопления;
  • ВидСчета;
  • ВидДвиженияБухгалтерии.
Привилегированные общие модули

Если для общего модуля установлен флаг "Привилегированный", то исполнение процедур и функций этого модуля приобретает важную специфику:

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

Общие рекомендации по ограничению прав


Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua