Разграничение доступа в 1С:Предприятии 8

Под разграничением доступа в системе программ 1С:Предприятие 8 (как и в другим многопользовательских системах) понимается система разрешений и запретов на доступ к различным объектам системы для различных пользователей. Разграничение доступа используется при решении ряда вопросов в различных областях:

Разграничение доступа в 1С:Предприятии 8 построено на трех понятиях - права, роли и пользователи.

Права

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

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

В отличие от интерактивных, обычные права проверяются во всех случаях (обращения из встроенного языка, Automation и т.д.) и включают в себя аналогичные интерактивные права - как, например, "Удаление" и "Интерактивное удаление". Устанавливая такие права в "запрещено", разработчик полностью отключает определяемый этими правами доступ к объектам. В случае если  доступ к объектам все же требуется (как в вышеописанном примере для запроса данных), можно запретить только интерактивный доступ.

Проиллюстрируем вышеприведенные правила на примере: складские документы и три сотрудника Кассир, Менеджер, Управляющий. Кассиру доступ к информации по складу не требуется, поэтому на складские документы все права для Кассира установлены в "запрещено". Менеджеру требуется информация со склада для планирования деятельности ( в сводной форме), поэтому интерактивный доступ  Менеджеру к складским документам запрещается, но разрешается чтение для использования информации в отчетах и сводках. И, наконец, Управляющий обладает всей полнотой власти в организации, поэтому все права на складские документы для Управляющего установлены в "разрешено".

Помимо разделения по интерактивности, между правами могут существовать и другие зависимости - скажем, любой доступ к справочнику включает в себя  доступ на чтение (эти и другие зависимости можно "вживую" наблюдать при редактировании прав в Конфигураторе). Отметим, что список прав не несет никакой информации по разрешению/запрещению того или иного способа доступа - эта информация хранится в ролях.

Роли

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

Как установка прав, так и роли могут проверяться во встроенном языке 1С:Предприятия 8 - для этого служат соответственно функции ПравоДоступа() и РольДоступна(). Списки прав для объектов фиксированы и не изменяются, поэтому для проверки возможности некоторого специфического способа доступа (например, возможности печати чеков на кассе) можно использовать два различных подхода:

Для вышеприведенного примера Кассир, Менеджер, Управляющий логично реализовать именно как роли - различным сочетаниям этих ролей соответствуют пользователи.

Пользователи

При внедрении этих решений в систему добавляются пользователи, доступ которых к объектам системы и требуется разграничить. Для этого каждому пользователю присваивается одна или несколько ролей в соответствии с их служебными обязанностями (например, один из Менеджеров исполняет также обязанности Кассира). При запросе пользователем некоторого доступа к некоторому объекту системы, для каждой роли, присвоенной пользователю, по объекту определяется установка соответствующего права. Если хотя бы для одной роли это право установлено, то пользователю дается разрешение на указанный доступ к указанному объекту. В противном случае доступ запрещается. Такой способ "сложения" установок прав в разных ролях позволяет упростить добавление прав при адаптации готового решения к специфике внедрения - для добавления пользователю права на доступ достаточно создать новую роль и в ней установить необходимое право в "разрешено". При этом уже существующие объекты конфигурации не изменяются, что упрощает ее дальнейшую поддержку разработчиком.