1с невидимый пользователю элемент управления не может выполнять интерактивные действия
Система прав доступа позволяет описывать наборы прав, соответствующие должностям пользователей или виду деятельности. Структура прав определяется конкретным прикладным решением.
Кроме этого, для объектов, хранящихся в базе данных (справочники, документы, регистры и т. д.) могут быть определены права доступа к отдельным полям и записям. Например, пользователь может оперировать документами (накладными, счетами и т. д.) определенных контрагентов и не иметь доступа к аналогичным документам других контрагентов.
Для реализации ограничения прав доступа в прикладных решениях предназначены специальные объекты конфигурации — Роли. Подробнее.
Интерактивные и основные права
Все права, поддерживаемые системой «1С:Предприятие 8», можно разделить на две большие группы: основные и интерактивные. Основные права описывают действия, выполняемые над элементами данных системы или над всей системой в целом, и проверяются всегда, независимо от способа обращения к данным. Интерактивные права описывают действия, которые могут быть выполнены пользователем интерактивно. Соответственно проверяются они только при выполнении интерактивных операций стандартными способами, причем в клиент-серверном варианте все проверки прав (кроме интерактивных) выполняются на сервере.
Основные и интерактивные права взаимосвязаны. Например, существует основное право Удаление, которому соответствуют два интерактивных права: Интерактивное удаление и Интерактивное удаление помеченных. Если пользователю запрещено Удаление, то и все интерактивные «удаления» также будут запрещены для него. В то же время, если пользователю разрешено Интерактивное удаление помеченных, это значит, что Удаление ему также разрешается.
Кроме того, основные права могут зависеть друг от друга. В результате образуются довольно сложные цепочки взаимосвязей, которые отслеживаются системой автоматически: как только разработчик снимает разрешение на какое-либо право, система сама снимает разрешения на все права, которые зависят от этого права. И наоборот, при установке какого-либо права разработчиком, система сама устанавливает все права, от которых это право зависит.
Например, для того, чтобы пользователь имел право Итерактивное удаление помеченных, ему необходимо обладать интерактивными правом Редактирование. Это право, в свою очередь, требует наличия интерактивного права Просмотр.
Право Интерактивное удаление помеченных требует наличия основного права Удаление. Интерактивное право Редактирование требует наличия основного права Изменение. Интерактивное право Просмотр требует наличия основного права Чтение.
Кроме этого основные права Изменение и Удаление требуют наличия основного права Чтение.
Ограничение доступа к данным на уровне записей и полей
Среди действий над объектами, хранящимися в базе данных (справочниками, документами и т. д.), есть действия, отвечающие за чтение или изменение информации, хранящейся в базе данных. К таким действиям относятся:- чтение — получение записей или их фрагментов из таблицы базы данных;
- добавление — добавление новых записей без изменения существующих;
- изменение — изменение существующих записей;
- удаление — удаление некоторых записей без внесения изменений в оставшиеся.
Для этих действий в процессе настройки ролей могут быть заданы дополнительные условия на данные (ограничение доступа к данным). В этом случае над конкретным объектом, хранимым в базе данных, может быть выполнено запрошенное действие только в том случае, если ограничение доступа к данным для данных этого объекта принимает значение «истина». Аналогичные условия могут быть заданы и для таблиц базы данных, не имеющих объектной природы (регистров).
Для объектных таблиц и регистров сведений могут быть заданы разные ограничения для различных полей таблицы, что позволяет определять ограничения не только на уровне записей базы данных, но и на уровне отдельных ее полей:
Для регистров накопления, бухгалтерского учета и расчета условия позволяют разграничить доступ по значениям измерений (для регистров бухгалтерского учета по балансовым измерениям), а для объектных данных и регистров сведений условия позволяют разграничивать доступ к данным по любым полям.
Условия ограничения можно ввести вручную или создать с помощью конструктора ограничений доступа к данным.
Параметры сеанса
Параметры сеанса представляют собой объекты прикладного решения, которые предназначены для использования в ограничениях доступа к данным для текущего сеанса (но могут применяться и для других целей). Их значения сохраняются в течение данного сеанса «1С:Предприятия 8». Использование параметров сеанса позволяет снизить время доступа к данным при ограничении доступа на уровне записей и полей. Подробнее.
Выполнение на сервере без проверки прав
Привилегированные модули
Существует возможность назначения привилегированных модулей. В такие модули могут быть перенесены операции, использующие данные, на которые у текущего пользователя нет прав.
Например, пользователю могут быть назначены права, позволяющие создавать новый документ. Однако никаких прав на регистр, в котором этот документ создает движения при проведении, пользователю не дано. В такой ситуации процедура проведения документа может быть вынесена в привилегированный модуль, который выполняется на сервере без проверки прав. В результате, несмотря на то, что соответствующий регистр для пользователя недоступен, пользователь все же сможет проводить созданные им документы.
Привилегированный режим исполнения программного кода
Привилегированный режим исполнения кода, аналогичный режиму работы кода привилегированных модулей, можно включить/выключить средствами встроенного языка. Для этого в глобальном контексте предусмотрена процедура УстановитьПривилегированныйРежим (), а также функция ПривилегированныйРежим (), которая позволяет определить, включен привилегированный режим, или нет.
Использование привилегированного режима позволяет, во-первых, ускорить работу, так как не будут накладываться ограничения на доступ к данным, а во-вторых, позволяет выполнять операции с данными от лица пользователей, которым эти данные недоступны.
Привилегированный режим рекомендуется использовать тогда, когда с логической точки зрения нужно отключить проверку прав, или когда можно отключить проверку прав, чтобы ускорить работу. Допустимо использовать привилегированный режим тогда, когда работа с данными от лица некоторого пользователя не нарушает установленные для этого пользователя права доступа.
Интерактивные - по сути, это интерфейсные права из формы списка (или формы элемента). Т.е. запретили интерактивное добавление - всё, из формы списка добавить нельзя элемент. Но обработкой, к примеру - пожалуйста.
Я бы выделял два типа прав - права на форму и права на объект. Опишу своими словами, если что не так, коллеги поправят :)
Права на объект.
Это ограничения, которые накладываются на сам объект в базе данных во время его изменения (создание, изменение, удаление) или чтения именно в физической таблице.
Пример:
- создаём элемент справочника,
- читаем элемент справочника,
- перезаписываем элемент справочника,
- удаляем его,
- используя обработку, неявно изменяем элемент справочника
- используя документ, неявно изменяем элемент справочника.
Во всех этих случаях идет проверка на ограничения на уровне объекта. Можно еще привести пример, если бы мы написали какой-нить код в модуле объекта в соответствующих процедурах (ПередЗаписью, ПередУдалением), то получили бы как раз ограничения на уровне объекта. Ну, кроме чтения.
Именно на этих принципах построена, в целом, работа ролей (в неинтерактивной их части).
Права на форму (интерфейс).
Это все т.н. интерактивные права, плюс права типа "просмотр", "редактирование" и т.п. В 1С на уровне платформы они полноценно реализованы только в управляемом приложении в 8.2 я так понимаю. В 8.1 - это такая недореализация наверно, поскольку, к примеру, убрать видимость элементов управления форм мы не можем, вообще на элементы формы мы повлиять не можем.
Подобный функционал многие реализуют уже непосредственно в конфигурациях. К примеру, регистр, туда заносим все элементы нужных форм и при их открытии проверяем - такие-то элементы выключить, такие-то вообще скрыть, такие-то поля редактировать не давать и пр. и пр.
[В моей рабочей базе примерно так и сделано :) ]
Про запросы и РЛС.
Платформа 1С даёт возможность влиять на ограничения на уровне объектов через запросы. Т.е., скажем, запрещать редактировать не всех контрагентов, а только по какому-нить признаку. И это ограничение будет работать абсолютно из всех мест базы и для любых способов. Это как раз и есть РЛС, работает механизм именно на объектном уровне. Аналогично и на чтение, и на удаление, и на добавление.
Простой способ отличить объектные права от интерфейсных - возможность написать ограничение РЛС.
Еще интересный пример - в своё время во вКонтакте профиль человека был заблокирован для просмотра, но по прямой ссылке иногда галереи фото были доступны. Т.е. ограничения на уровне интерфейса есть, а на уровне объекта - нет :).
Модуль управляемого приложения
Предназначен в основном для того чтобы поймать момент запуска приложения и момент завершения работы. Здесь же находятся обработчики, которые позволяют перехватить внешнее событие от оборудования. В модуле управляемого приложения отслеживается именно интерактивный запуск системы.
События модуля управляемого приложения срабатывают при запуске тонкого клиента, Веб-клиента и Толстого клиента управляемого приложения. В модуль упр. приложения можно попасть из палитры свойств корневого узла конфигурации или из контекстного меню вызванного на корневом узле конфигурации.
Модуль обычного приложения
Модуль обычного приложения играет такую же роль как и модуль управляемого приложения, только события модуля обычного приложения срабатывают при запуске толстого клиента обычного приложения.
Модуль обычного приложения станет доступен из палитры свойств корневого узла конфигурации после установки в параметрах конфигуратора на вкладке «Общие» опции «Редактирование конфигурации для режимов запуска» в положение «Управляемое приложение и обычное».
Модуль внешнего соединения
Модуль внешнего соединения предназначен для обработки события входа (не интерактивного, а в режиме COM-соединения) и выхода из системы. Имеются соответствующие обработчики. При COM-соединении не происходит открытие интерактивного окна, поэтому функции для диалога с пользователем не сработают. В модуле возможно описывать экспортные переменные и методы. Модуль внешнего соединения компилируется на сервере. Т.е. возможно обращение к соответствующим объектам конфигурации, например к справочникам.
Модулем сеанса
Существует такой общий объект конфигурации как «Параметры сеанса». Модуль сеансов создан для инициализации параметров сеанса (для этого существует определенное событие, при запуске приложения оно стартует самое первое).
Запускается в привилегированном режиме (не выполняется проверка прав доступа при обращении к БД). Модуль сеанса компилируется на сервере. Нет раздела описания переменных и раздела основной программы, нельзя описывать экспортные методы, используется только для установки параметров сеанса. Как видно у модуля сеанса очень узкое предназначение.
Общие модули
Общие модули описывают некоторые общие алгоритмы, содержат функции, которые могут вызываться из различных мест. Общие модули могут быть скомпилированы как на клиенте, так и на сервере.
В общих модулях доступен ТОЛЬКО раздел описания процедур и функций. Если необходимо использовать глобальную переменную то можно использовать, либо параметры сеанса, либо экспортную переменную модуля управляемого приложения.
В общем модуле можно задавать некоторые параметры, которые будут влиять на его поведение. Если в общем модуле установлена галочка «Глобальный» то его экспортные функции будут участвовать в формировании глобального контекста. И к ним можно будет обратиться из другого контекста напрямую (без упоминания имени общего модуля) : МетодОбщегоМодуля( );
Не стоит использовать свойство «Глобальный» общих модулей повсеместно, т.к. такие модули компилируются при старте системы и замедляют старт программы
Модуль объекта
У многих объектов конфигурации (справочники, документы и т.д. ) существует модуль объекта. В него можно вводить стандартные события, такие как создание нового элемента справочника, запись нового объекта, удаление, обработка проведения документа и т.д. Событие записи существует и в модуле формы (возникает в процессе интерактивной записи, когда пользователь нажимает на кнопку «записать») и в модуле объекта.
Нужно помнить, что у одного объекта может быть несколько форм. Поэтому событие записи нужно обрабатывать именно в модуле объекта. Именно там проверяется корректность записываемых данных.
Модуль объекта можно вызвать из палитры свойств данного объекта, либо из контекстного меню. Структура модуля объекта не отличается от модуля формы. Модуль объекта компилируется на сервере, соответственно директивы компиляции указывать не требуется.
Модуль формы
Модуль формы предназначен для обработки действий пользователя (обработка события нажатия кнопки и т.д.). Так же существуют события связанные непосредственно с самой формой (например событие её открытия, закрытия). Модули управляемых и обычных форм различаются прежде всего тем, что модуль управляемой формы четко разделяется на контекст. Каждая процедура должна иметь директиву компиляции. В обычной форме весь код исполняется на клиенте.
Структура управляемой формы содержит раздел описания переменных, раздел процедур и функций и раздел основной программы (выполняется в момент инициализации формы). К стандартным событиям формы можем обратиться через список процедур и функций (Ctrl+Alt+P) либо в палитре свойств самой формы. Так же в управляемой форме можно обработать событие записи элемента (это событие присутствует только для объектов: справочников, документов).
Модуль менеджера объекта
Модуль менеджера появился только в 1С 8.2,существует у многих объектов конфигурации. Основное предназначение модуля менеджера объекта это переопределить стандартное событие «ОбработкаПолученияДанныхВыбора», а так же в нем можем
Модуль менеджера значений
У объекта конфигурации константы не существует модуля объекта, а существует очень похожий модуль – модуль менеджера значений. В модуле менеджера значения константы можно описать различные процедуры (в том числе и экспортные), а также обработать 3 события: ПередЗаписью, ПриЗаписи, ОбработкаПроверкиЗаполнения. Этот модуль компилируется на сервере.
Модули наборов записей
Модуль набора записей является аналогом модуля объекта и присущ регистрам. В модуле набора записей существуют стандартные события:
- Перед записью
- При записи
- Обработка проверки заполнения
В модуле набора записей существует раздел описания переменных, процедур и функций (в том числе и экспортных), раздел основной программы.
Читайте также: