Ограничение доступа к кассам 1с. RLS – гибкая и тонкая настройка ограничений доступа к данным

Обновление

Ограничение доступа к кассам 1с. RLS – гибкая и тонкая настройка ограничений доступа к данным

Эта разработка позволяет настроить выборочную блокировку (открытия или изменения) справочников и документов для разных пользователей (или групп пользователей).

Тут вы можете спросить – А не проще ли обойтись установкой нужных ролей для пользователей
?

Отвечаю – не всегда. Нередко типовые роли являются избыточными, и в придачу к установке нужных прав для пользователей предоставляют им дополнительные ненужные полномочия. К тому же иногда бывает нужно ограничить возможность редактирования уже проведенных документов – такую задачу типовыми средствами не решить.

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

Для примера, ограничим конкретному пользователю доступ к документу Заказ клиента
:

Откроем форму настройки прав доступа:

Нас интересует регистр сведений Ограничение доступа к данным
:

После этого откроется список настроек, создаем новую:

На форме настроек выбираем:

Теперь попытка пользователя открыть заказ заканчивается ничем:

Ограничение не распространяется на пользователей с полными правами.

Несмотря на запрет доступа к заказам, пользователь без проблем может просматривать список заказов, ограничение касается только просмотра формы конкретного документа.

Работа в программе 1С позволяет разным пользователям назначать функциональный доступ к документам и справочникам базы. Например:

  • Если пользователь работает как бухгалтер, то ему в 1С назначается соответствующая роль, позволяющая добавлять, изменять, удалять документы и справочники по хозяйственной деятельности.
  • Если пользователь 1С работает только с отчетами и просматривает данные базы, допустим, менеджер, то ему даются права на чтение данных.
  • Пользователь, который может работать со всеми объектами программы 1С – Администратор, имеет полные права и получает неограниченный доступ по работе с базой данных в 1С.

Права доступа может настраивать только Администратор
– пользователь 1С, которому назначены Полные права.

Установка прав доступа в 1С 8.3 Бухгалтерия 3.0

В 1С:Бухгалтерия 8 ред. 3.0 выделено 4 основных профиля для работы с программой:

  • Администратор;
  • Бухгалтер;
  • Главный бухгалтер;
  • Синхронизация с другими программами;
  • Только чтение.

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

Каждой роли соответствует набор возможностей для работы с объектами конфигурации, это –

  • Чтение;
  • Добавление;
  • Проведение;
  • Отмена проведения;
  • Редактирование;
  • Удаление.

Если открыть какую-то заданную роль, то по каждому объекту можно просмотреть – что можно делать с каждым объектом конфигурации:

Важно знать, что пользователю 1С можно назначать любую совокупность ролей из заданного разработчиками списка. При этом, если в какой-то роли изменять объект нельзя, а в другой, добавленной этому пользователю роли – можно, то результирующая по правам пользователя будет – можно «изменять». Роли взаимно дополняют друг друга. Для того, чтобы объект не мог быть изменен пользователем, ни в одной из заданных ему ролей не должно стоять «Изменение».

Настройка прав доступа в 1С 8.3 Бухгалтерия

Настройка прав доступа в 1С 8.3 осуществляется в разделе Администрирование – Настройки пользователей и прав:

Открывается окно Настройки пользователей и прав:

Рассмотрим возможности настройки доступа в 1С.

Как создать нового пользователя в 1С 8.3

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

Пароль необходимо помнить! Если пароль утерян, то только Администратор может перезадать его заново. Если пароли утеряны и в базу не войти, то придется «взламывать» вход в базу.

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

Как настроить права доступа на основании типовых профилей в 1С 8.3

Каждому пользователю (Администрирование – Настройки пользователей и прав – Пользователи) назначают Права доступа из списка профилей, что есть в конфигурации. Например, для бухгалтера Петровой С.Б. назначаем профиль Бухгалтер:

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

Отмечаем настройки для переноса новому пользователю Бухгалтер Петрова от пользователя Администратор:

Переносим персональные настройки, настройки печати и Избранное:

Нажимаем кн. Выбрать и в форме выбора настроек «Скопировать и закрыть». Все настройки для нового пользователя от пользователя Администратор перенесены.

Настройка прав доступа с добавлением новых профилей в 1С 8.3

Создаем новый профиль с ограниченным доступом к справочникам и документам. Профили групп доступа – Создать:

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

  • Отражение зарплаты в бухгалтерском учете;
  • Чтение налогов и взносов;
  • Взаиморасчеты с сотрудниками;
  • Персонифицированный учет;
  • Учет зарплаты:

По кн. Только выбранные роли
показывается список выбранных ролей пользователя. Кадровый учет можно задать отдельно для профиля Кадровик.

Как настроить дополнительные права доступа к уже имеющимся типовым профилям в 1С 8.3

Конкретному пользователю 1С с выбранным профилем можно добавлять функционал. Например, для пользователя Петрова, в профиле Бухгалтер, не доступна команда Все функции
, но мы можем ее добавить данному пользователю. Заходим Администрирование – Настройки пользователей и прав – Профили групп доступа. Кн. Создать – режим Все функции – добавляем права Режим “Все функции”:

Добавляем новый профиль бухгалтеру Петровой С.Б.:

Настройка дополнительных прав доступа к отдельным документам и справочникам в 1С 8.3

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

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

В 1С 8.3, в связи с появлением новой возможности работать с приложениями конфигурации, можем реализовать свою задачу по разграничению прав пользователей без снятия запрета редактирования с основной конфигурации и оставляя ее полностью типовой. Как это сделать – сейчас и рассмотрим:

  1. Для справочника Пользователи
    введем дополнительный реквизит «Доступ_Реализации_Товаров», который будет принимать значения «Да» или «Нет».

Заходим Администрирование – Общие настройки –Дополнительные реквизиты и сведения. Включаем возможность работать с «Реквизитами и сведениями с общим списком значений»:

  1. Открываем гиперссылку Дополнительные реквизиты
    .

В левой колонке перечней объектов конфигурации находим Пользователи
и нажимаем на кн. Добавить
. Открывшуюся форму заполняем как показано ниже. Новый реквизит будет иметь два значения: «Да» и «Нет». Объединим значения в группу «Доступ». Заполняем закладку Главное:

Заполняем закладку Значения:

  1. Теперь заполним этот реквизит для наших пользователей.

«Бухгалтер Петрова» – Нет:

«Администратор» – Да:

Все необходимые действия в базе 1С 8.3 сделаны, теперь будем работать с расширением Конфигурации
.

  1. Входим в конфигуратор базы данных: Конфигурация – Расширения конфигурации:

Добавляем новое расширение конфигурации по кн. +:

Соглашаемся с выбранными по умолчанию данными расширения или задаем свои:

Открываем конфигурацию расширения по кн. :

Сейчас будем переносить из основной конфигурации данные, необходимые для работы. Созданное расширение конфигурации «Расширение 1» пока пустое:

В основной конфигурации находим в документах – документ Реализация товаров и услуг, и переносим форму с которой будем работать. Например, добавим «ФормаДокументаТовары» в расширение конфигурации, встав на наименование формы и щелкнув по ней правой кн. мышки. Из выпадающего меню выбираем команду «Добавить в расширение»:

Открываем форму в расширении конфигурации и создаем обработку события ПередЗаписью
. При создании обработчика события программа 1С 8.3 попросит указать, где создавать программный код. Выбираем: Создать на клиенте и процедуру на сервере без контекста:

При создании события увидим в пустой клеточке событий «ПередЗаписью» назначенную программой 1С 8.3 процедуру обработки события: «Расш1_ПередЗаписью»:

Переходим в модуль формы и вставляем следующий программный код:

Обновляем изменения и запускаем базу в пользовательском режиме для проверки внесенных изменений. Входим под пользователем Бухгалтер Петрова и редактируем документ Реализации Товаров и услуг, нажимаем кн. Записать
:

Для администратора редактирование документа пройдет без проблем.

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

Как предоставить доступ к варианту отчета с индивидуальными настройками для других пользователей в 1С 8.3 ЗУП смотрите в нашем видео:

В системе 1С Предприятие 8, сегодня мы продолжим изучение механизма прав и углубимся далее — в механизм RLS (ограничение прав на уровне записей).

Ниже мы рассмотрим достоинства и недостатки данного метода и рассмотрим настройку RLS в 1С Предприятии 8.3 на примере.

1С RLS (Record Level Security) или ограничение прав на уровне записи
— это прав пользователей в системе 1С, которая позволяет разделить права для пользователей в разрезе динамически меняющихся данных.

Самый распространенный вид настройки 1C RLS — ограничение видимости пользователя в разрезе организаций или клиентов (пользователь видит лишь «свои» данные).

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

Недостатки 1С 8 RLS

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

Также среди недостатков — сложность настройки этого функционала и сложность отладки. 1C выпустило очень мало материалов по настройке и работе этого функционала. Достаточно трудно найти специалиста, который грамотно настроил бы механизм.

Настройка ограничения прав на уровне записей 1С RLS

Ограничение прав на уровне записи (RLS) применяется для ограничения следующих типов прав:

  • Чтение
  • Добавление
  • Изменение
  • Удаление

Получите 267 видеоуроков по 1С бесплатно:

Внешне настройка RLS (прав на уровне записей) похожа на составление простого . Пример шаблона для ограничения доступа видимости документов по клиенту из шапки документа:

##Если &ИспользоватьОграниченияПравДоступаНаУровнеЗаписей ##Тогда

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

По сути, этот запрос каждый раз добавляется при запросе к таблице «#ТекущаяТаблица». Из чего можно представить, какую дополнительную нагрузку несет в себе механизм ограничения на уровне записи.

Как Вы видите, в запросе есть специальные параметры, например » &ИспользоватьОграниченияПравДоступаНаУровнеЗаписей». Это параметры в РЛС подбираются из объектов метаданных — « «. Как правило, они задаются при старте сессии пользователя.

Конструктор ограничения доступа к данным

Для удобства разработчика в 1С 8.3 есть специальная утилита для помощи в настройки РЛС — Конструктор ограничения доступа к данным. Он вызывается из поля «Ограничение доступа». Выглядит следующим образом:

Разработчики в управляемых приложениях применили новый механизм настройки прав доступа, о которых и пойдет речь.

Будут перечислены все те грабли, которые собрал автор, чтобы вы о них знали.

Наверняка, уже все знают, что из себя представляет новая система, поэтому предистория вкрадце:

Как было раньше(в обычном приложении):

Есть документ. Есть Роли – ПолныеПрава, ДокументНетДоступа, ДокументТолькоЧтение, ДокументЧтениеИРедактирование. В конфигураторе(аналогичный механизм в реж предприятия) вы выставляете пользователям эти роли и у них появляются соответствующие права доступа на документ. Все просто и скучно и даже зевать хочется.

С введением управляемого приложения разработчики решили усложнить(читается как расширить) настройки прав доступа.

Теперь:

Вводная та же. Чтобы дать пользователю какие-то права на документ – сначала вам необходимо создать элемент справочника Профили групп доступа. Это некий агрегирующий(суммирующий значения) объект, который объединяет роли в группы ролей. Теоритически таких профилей можно создать сколько угодно много с различным набором ролей(N*(n-1), где N – количество ролей), но на практике количество профилей определяется количеством должностных обязанностей пользователей в организации и их гораздо меньше, чем ролей.

Создаем профили Бесправный(с ролью ДокументНетДоступа), Аудитор(с ролью ДокументТолькоЧтение), Бухгалтер(с ролью ДокументЧтениеИРедактирование).

Чтобы “привязать” эти профили к пользователям – нужно создать элементы справочника ГруппыДоступа. В типовых они создаются автоматически, когда вы отмечаете галочками профили для пользователя. Этот справочник соединяет профиль и пользователя(или нескольких пользователей).

При записи этого элемента справочника система автоматически добавляет роли (из профиля) в роли пользователя. Поэтому не стоит напрямую редактировать роли в конфигураторе, как раньше – при редактировании прав в Предприятии все роли в конфигураторе будут обновлены на роли из профилей пользователя. Кроме того, будет наблюдаться явное противоречение между набором профилей с ролями и ролями, установленными в конфигураторе.

Как хранятся роли в Профиле групп доступа, спросите вы. Ведь роли – это объекты МД, это не ссылочные типы. Отвечаю – для этого(и не только) разработчики создали служебный справочник ИдентификаторыОбъектовМетаданных, в котором хранится(в иерархии!) имена, синонимы, значения пустых ссылок всех объектов МД. Если вы хотите создать Профиль программно и добавить в него роль, то код примерно будет таким:

Код 1C v 8.2 УП РодительРоли = Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоНаименованию(“Роли”);//ничего страшного искать по наименованию,

//справочник – служебный и непосредственного редактрования в нем нет
ИдентификаторМоейРоли = Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоРеквизиту(“Имя”,”МояРоль”,РодительРоли);
Если ЗначениеЗаполнено(ИдентификаторМоейРоли) Тогда
НайденныйИдентификаторМоейРоли = МойПрофиль.Роли.Найти(ИдентификаторМоейРоли);
Если НайденныйИдентификаторМоейРоли= неопределено тогда
НовСтрока = МойПрофиль.Роли.Добавить();
НовСтрока.Роль = ИдентификаторМоейРоли;
КонецЕсли;
КонецЕсли;

Код 1C v 8.2 УП Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(ИСТИНА,ЛОЖЬ,ЛОЖЬ);//ЕстьИзменения, ЕстьУдаленные, ТолькоПроверка

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

Но обратная связь не работает – вы в режиме предприятия назначили пользователю профиль(с созданием группы доступа), а роль у пользователя в конфигураторе не добавилась! Что делать?

За синхронизацию ролей/профилей отвечает константа ПараметрыРаботыПользователей. Если роли не обновляются в конфигураторе, следует обновить её значение:

Код 1C v 8.2 УП Константы.ПараметрыРаботыПользователей.СоздатьМенеджерЗначения().ОбновитьОбщиеПараметры();

Хорошо, скажите вы. А как быть, если я хочу создать группы доступа программно? Да не вопрос. Единственное ограничение – не допускаются дубли связок Профиль-Пользоваль в группах доступа. Примерный код будет таким:

Код 1C v 8.2 УП //МойПрофиль – профиль, который мы хотим добавить пользователю МойПользователь

Если МойПрофиль = Справочники.ПрофилиГруппДоступа.Администратор Тогда // если мы хотим пользователю дать роль Администратора,
//то нельзя создавать новую группу доступа, надо редактировать предопределенную Администраторы
ГруппаДоступаАдм = Справочники.ГруппыДоступа.Администраторы;
Если ГруппаДоступаАдм.Пользователи.Найти(МойПользователь) = неопределено Тогда
ГруппаДоступаАдмОб= ГруппаДоступаАдм.ПолучитьОбъект();
НовСтрока = ГруппаДоступаАдмОб.Пользователи.Добавить();
НовСтрока.Пользователь = МойПользователь;
ГруппаДоступаАдмОб.Записать();
КонецЕсли;
Иначе // все прочие профили, кроме Администратора
Запрос = новый Запрос;
Запрос.Текст = “ВЫБРАТЬ
|ГруппыДоступа.Ссылка
|ИЗ
|Справочник.ГруппыДоступа КАК ГруппыДоступа
|ГДЕ
|ГруппыДоступа.Профиль = &Профиль
|И (ГруппыДоступа.Пользователь = &Пользователь
|ИЛИ ГруппыДоступа.Пользователи.Пользователь = &Пользователь)
|И НЕ ГруппыДоступа.ПометкаУдаления “;
Запрос.УстановитьПараметр(“Профиль”,МойПрофиль);
Запрос.УстановитьПараметр(“Пользователь”,МойПользователь);
Выборка = Запрос.Выполнить().Выбрать();
Если НЕ Выборка.Следующий() тогда //нет такого профиля, надо создать
МояГруппаДоступаОб = справочники.ГруппыДоступа.СоздатьЭлемент();
МояГруппаДоступаОб.Наименование = Строка(МойПрофиль);
МояГруппаДоступаОб.Пользователь = мойПользователь;
Нов = МояГруппаДоступаОб.Пользователи.Добавить();
Нов.Пользователь = МойПользователь;
МояГруппаДоступаОб.Профиль = МойПрофиль;
МояГруппаДоступаОб.Записать();
КонецЕсли; //Нет такого профиля
КонецЕсли;//профиль Администратор

После выполнения этого кода, если все, что нужно обновлено – типовая конфигурация добавит пользователю роли.

Раз уж пошли по программному пути, вот код, который добавляет пользователя в справочник Пользователи и ПользователяИБ в ПользователиИнформационнойБазы:

Код 1C v 8.2 УП ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
ПользовательИБ.имя = “Иванов”;
ПользовательИБ.ПолноеИмя = “Иванов Иван Иванович”;
ПользовательИБ.АутентификацияСтандартная = ИСТИНА;
ПользовательИБ.Пароль = “”;
ПользовательИБ.записать();
Пользователь = Справочники.Пользователи.НайтиПоРеквизиту(“ИдентификаторПользователяИБ”,ПользовательИБ.УникальныйИдентификатор));
если Пользователь.Наименование = “” Тогда
//создаем пользователя
ПользовательОб = Справочники.Пользователи.СоздатьЭлемент();
ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ();
ЗаполнитьЗначенияСвойств(ОписаниеПользователяИБ,ПользовательИБ);
ОписаниеПользователяИБ.УникальныйИдентификатор = Соединение.NewObject(“УникальныйИдентификатор”,ПользовательИБ.УникальныйИдентификатор);
ПользовательОб.Наименование = ОписаниеПользователяИБ.ПолноеИмя;
ОписаниеПользователяИБ.Вставить(“Действие”,”Записать”);
ПользовательОб.ДополнительныеСвойства.Вставить(“ОписаниеПользователяИБ”,ОписаниеПользователяИБ);
ПользовательОб.записать();
КонецЕсли;

Если вы добавляете не программно, то добавлять нужно из режима Предприятия – тогда пользовательИБ у вас сам создатся.

И если раньше, в обычном приложении, достаточно будет добавить польз в конфигураторе – и при заходе в Предприятие, этот польз сам создавался в спр Пользователи, то с управляемым приложением такой фокус не прокатит – система не даст зайти под пользователемИБ, которого нет в справочнике Пользователи.

Оцените статью
Добавить комментарий

восемнадцать − десять =