В процессе администрирования корпоративных систем часто возникает требование ограничить видимость информации внутри одной организации или базы данных. Например, менеджеры по продажам не должны видеть сделки коллег, а бухгалтеры участков — документы смежных подразделений.
Реализация такого сценария в платформе 1С:Предприятие 8 требует грамотной работы с правами доступа. Простого разграничения прав на выполнение действий недостаточно, необходимо внедрить механизм ограничений на уровне записей (РЛС).
Данная статья подробно описывает алгоритм создания профилей групп доступа, настройки ролей и написания кода ограничений, который гарантирует, что пользователь увидит в списках и формах только те документы, которые он создал или за которыми закреплен.
Принципы работы системы прав 1С:Предприятие
Система безопасности платформы построена на иерархической структуре, где базовым элементом является роль. Роль определяет набор разрешенных действий: чтение, запись, удаление или проведение объектов метаданных. Однако стандартные роли обычно дают доступ ко всем объектам определенного типа.
Для реализации требования «видеть только свое» необходимо использовать механизм ограничений доступа к данным. Этот механизм позволяет фильтровать выборки из базы данных еще на этапе формирования запроса, не загружая лишнюю информацию в память клиента.
Важно понимать разницу между правами на объекты метаданных и правами на конкретные записи. Если у пользователя нет права на чтение справочника «Номенклатура», он не откроет его вовсе. Если же право есть, но наложено ограничение, он увидит только часть списка, соответствующую условию фильтрации.
Настройка осуществляется через интерфейс «Администрирование» или в режиме конфигуратора, в зависимости от версии конфигурации и прав текущего пользователя. В типовых конфигурациях, таких как Управление торговлей или Бухгалтерия предприятия, уже существуют предопределенные механизмы для этих целей.
Создание новой роли и профиля групп доступа
Первым шагом является создание новой роли, которая будет служить контейнером для наших ограничений. В дереве метаданных конфигуратора найдите ветку «Роли», создайте новую роль с понятным именем, например, ПросмотрТолькоСвоихДокументов.
В свойствах роли необходимо установить флаги прав. Для начала дайте полные права на чтение нужных документов, но пока не настраивайте сложные ограничения внутри самой роли. Основную логику мы будем прописывать в специальном подразделе.
После сохранения конфигурации и обновления базы данных перейдите в режим «1С:Предприятие». Откройте форму «Профили групп доступа» через меню «Администрирование» → «Настройки пользователей и прав». Создайте новый профиль.
В созданном профиле укажите только что созданную роль. Именно к этому профилю мы будем привязывать конкретных пользователей. Такая модульность позволяет легко менять состав прав, не переделывая структуру ролей каждый раз.
Используйте префиксы в названиях ролей, например "Z_Custom_", чтобы отличать свои разработки от типовых объектов конфигурации при обновлении.
Настройка ограничений на уровне записей (РЛС)
Самый важный этап — описание логики ограничения. Вернитесь в конфигуратор и откройте свойства созданной роли. Перейдите на вкладку «Другие права» и найдите раздел «Ограничения на уровне записей». Здесь мы пишем код на встроенном языке запросов.
Для каждого объекта, доступ к которому нужно ограничить (например, документ «Заказ клиента»), необходимо добавить новую строку. В поле «Таблица» укажите имя объекта метаданных, а в поле «Условие» — логическое выражение.
Условие должно сравнивать владельца документа с текущим пользователем. Стандартная функция ПользовательИнформационнойБазы() возвращает ссылку на текущего юзера. Пример условия: Ответственный = &ТекущийПользователь.
⚠️ Внимание: Убедитесь, что в справочнике «Пользователи» поле «Ответственный» заполнено корректной ссылкой на элемент справочника «Пользователи», иначе ограничение не сработает и пользователь не увидит ни одного документа.
Если логика сложнее, например, нужно показывать документы своего отдела, условие может выглядеть так: Подразделение.Владелец = &ТекущееПодразделение. Переменные в условиях начинаются с амперсанда и подставляются системой автоматически.
Что делать, если документа нет в списке доступных для ограничения?
Если объект не отображается в списке ограничений роли, проверьте, включено ли для него использование прав доступа в свойствах объекта метаданных в конфигураторе.
Привязка пользователей и тестирование доступа
После настройки роли и ограничений необходимо назначить профиль доступа конкретному сотруднику. В интерфейсе программы откройте карточку пользователя в справочнике «Пользователи».
На вкладке «Прочее» или «Настройки» найдите поле «Профиль группы доступа». Выберите из списка созданный ранее профиль. Если поле не видно, возможно, в вашей конфигурации используется упрощенный интерфейс прав, и настройку нужно проводить через общую форму управления доступом.
Для проверки эффективности настроек войдите в систему под тестовым пользователем. Откройте журнал документов, который вы ограничили. Вы должны увидеть только те записи, где в поле «Ответственный» стоит ваша учетная запись.
Попробуйте создать новый документ. Он должен сохраниться успешно, так как право на запись у вас есть. Однако при попытке открыть чужой документ по прямой ссылке или через общий журнал, система должна выдать сообщение об отсутствии прав или просто не показать запись в списке.
Особенности работы с общими журналами документов
Стандартные журналы документов в 1С часто имеют свои собственные механизмы отборов. Если РЛС настроен верно, но пользователь все равно видит лишнее, проблема может быть в настройках самого журнала или в кэше.
Иногда в формах списков установлены отборы по умолчанию, которые конфликтуют с ограничениями РЛС или перекрывают их. Проверьте настройки варианта отчета или списка, убедившись, что там нет жесткой фильтрации, исключающей ваши документы.
Также стоит учитывать кэширование прав на стороне клиента. После изменения настроек в конфигураторе и обновления конфигурации, пользователю рекомендуется завершить сеанс и войти заново, чтобы клиентское приложение загрузило актуальный профиль безопасности.
В некоторых случаях, особенно в старых версиях платформ, может потребоваться выполнение процедуры СброситьКэшПравДоступа() через консоль команд или специальную обработку администратора.
| Объект доступа | Тип ограничения | Пример условия | Сложность |
|---|---|---|---|
| Документ «Заказ» | По пользователю | Ответственный = &ТекущийПользователь | Низкая |
| Справочник «Контрагенты» | По группе | ГруппаДоступа = &МояГруппа | Средняя |
| Регистр сведений «Цены» | По типу цен | ТипЦены.Владелец = &Отдел | Высокая |
| План счетов | По организации | Организация = &МояОрганизация | Средняя |
Частые ошибки и способы их устранения
Одной из распространенных проблем является ситуация, когда пользователь не видит даже свои документы. Это часто случается, если в условии РЛС используется поле, которое у существующих записей не заполнено (пустая ссылка).
Другая ошибка — конфликт ролей. Если пользователю назначено две роли, и в одной есть разрешение на чтение всего, а в другой — ограничение, то в 1С действует принцип объединения прав (разрешающий). Ограничение сработает только если ни одна из ролей не дает полного доступа.
Также важно проверять актуальность интерфейса. В новых версиях 1С:Предприятие 8.3 и выше механизмы безопасности были доработаны, и некоторые старые методы настройки через внешние обработки могут работать некорректно.
⚠️ Внимание: Интерфейс и терминология в различных конфигурациях (Бухгалтерия, ЗУП, УТ) могут отличаться. Всегда сверяйтесь с документацией к вашей конкретной редакции программы перед внесением изменений.
Для отладки используйте режим предприятия с отладчиком или включите технологический журнал (ТЖ). В логах можно увидеть текст запроса, который формируется системой, и понять, почему нужные записи отсекаются.
☑️ Диагностика проблемы доступа
Оптимизация производительности при большом объеме данных
При настройке РЛС на высоконагруженных базах важно помнить о влиянии условий на скорость работы запросов. Слишком сложные условия, особенно с вложенными выборками или обращениями к регистрам сведений, могут замедлить открытие списков.
Старайтесь использовать индексированные поля в условиях ограничений. Поле «Ответственный», как правило, индексируется по умолчанию, но если вы фильтруете по комментарию или текстовому полю, производительность может упасть.
Если требуется ограничить доступ к миллионам записей, рассмотрите возможность использования механизмов архивирования или разделения данных по информационным базам, так как РЛС все же является фильтром на лету.
Правильно настроенное ограничение на уровне записей не только обеспечивает безопасность, но и ускоряет работу пользователя, так как система загружает меньше данных из базы.
⚠️ Внимание: Избегайте использования функций, выполняющих дополнительные запросы внутри условия РЛС, это может привести к значительному торможению работы системы при открытии любых форм.
Можно ли настроить доступ так, чтобы пользователь видел документы только за текущий месяц?
Да, это возможно. В условии ограничения на уровне записей используйте функцию работы с датами. Пример условия: Дата >= НачалоМесяца(ТекущаяДата()) И Дата < КонецМесяца(ТекущаяДата()). Однако учтите, что с наступлением нового месяца пользователю потребуется переподключение или обновление прав, если условие не динамическое.
Что делать, если руководитель должен видеть документы всех подчиненных?
Для этого нужно создать отдельную роль для руководителей. В условии РЛС для этой роли используйте проверку вхождения пользователя в группу подчиненных или проверку поля «Руководитель» в карточке сотрудника, связанного с документом. Логика будет сложнее: Ответственный = &ТекущийПользователь ИЛИ Ответственный.Руководитель = &ТекущийПользователь.
Влияет ли настройка РЛС на скорость формирования отчетов?
Да, влияет. Поскольку отчеты строятся на основе запросов к базе данных, условия РЛС автоматически добавляются в эти запросы. Если отчет сложный, а условие ограничения ресурсоемкое, время формирования отчета увеличится. Рекомендуется тестировать критичные отчеты после внедрения ограничений.
Как снять ограничение с конкретного пользователя в экстренной ситуации?
Самый быстрый способ — временно изменить профиль группы доступа пользователя на профиль с полными правами (например, «Администратор» или «Полные права») через форму управления доступом. После решения проблемы профиль нужно вернуть обратно.
Работают ли ограничения РЛС в мобильном клиенте 1С?
Да, механизм ограничений на уровне записей является серверным и работает независимо от типа клиента. Мобильное приложение, веб-клиент и толстый клиент получат одинаково отфильтрованные данные в соответствии с правами пользователя.