Как закрыть данные от изменений: роли, профили, даты запрета и RLS

· 10 мин

Содержание

Запрет редактирования в 1С 8.3 ставится тремя способами. В типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11) права меняют без Конфигуратора: Администрирование → Настройки пользователей и прав → Профили групп доступа, а закрытый период блокируют датой запрета изменения данных. В самописных и доработанных базах роли правят в Конфигураторе: снимают у объекта право «Изменение» или «Редактирование».

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

Как устроены права доступа в 1С 8.3

Платформа проверяет права на каждом обращении к данным. Если права нет, пользователь видит сообщение Нарушение прав доступа! или просто не находит команду в меню.

Основа механизма — роль. Это набор разрешений на объекты конфигурации: справочники, документы, регистры, отчёты, обработки. Роль создаёт разработчик в Конфигураторе. Права в роли только разрешают: «запрещающей» роли не бывает.

Отсюда главное правило:

  • ✅ права разных ролей пользователя складываются;
  • ❌ если хотя бы одна роль даёт право изменять документ, остальные его не отнимут;
  • 🔒 запрет — это отсутствие разрешения во всех ролях пользователя.

В конфигурациях на Библиотеке стандартных подсистем (БСП) — а это все современные типовые — над ролями есть ещё два уровня:

УровеньГде настраиваетсяЧто содержит
РольКонфигураторПрава на объекты метаданных
Профиль группы доступаРежим «Предприятие»Набор ролей и виды доступа
Группа доступаРежим «Предприятие»Профиль + список пользователей + значения ограничений

Пользователю в типовой базе роли напрямую не назначают. Его включают в группу доступа, а группа получает роли из профиля. Если поставить роль пользователю через Конфигуратор, БСП перезапишет её при следующей синхронизации прав.

Настройка ролей в Конфигураторе: снимаем право на изменение

Этот путь нужен для нетиповых баз и для собственных ролей. Типовые роли поставщика менять не стоит: при обновлении конфигурации правки придётся переносить вручную.

Пошагово

  1. Откройте базу в Конфигураторе и сделайте резервную копию: Администрирование → Выгрузить информационную базу.
  2. В дереве метаданных раскройте Общие → Роли.
  3. Создайте новую роль или откройте свою. Двойной щелчок открывает редактор прав.
  4. Слева выберите объект, например Справочники → Номенклатура.
  5. Справа отметьте только те права, которые нужны. Для режима «только чтение» оставьте «Чтение» и «Просмотр», а «Изменение», «Редактирование», «Добавление», «Интерактивное добавление» и права на удаление снимите.
  6. Сохраните конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7).
  7. Назначьте роль пользователю: Администрирование → Пользователи, вкладка «Прочие» в карточке пользователя.

Чем различаются похожие права

ПравоЧто разрешает
ЧтениеПолучать данные объекта, в том числе программно и в отчётах
ИзменениеЗаписывать изменения, в том числе программно
ПросмотрОткрывать объект в форме
РедактированиеМенять данные в форме
Интерактивное добавлениеСоздавать объект кнопкой из интерфейса
Интерактивная пометка удаленияСтавить пометку удаления вручную

Права с приставкой «Интерактивное» и пара «Просмотр/Редактирование» касаются только работы через формы. Если снять «Редактирование», но оставить «Изменение», пользователь не поправит карточку руками, а обработка, запущенная от его имени, запишет объект.

У реквизитов и табличных частей свои права «Просмотр» и «Редактирование». Так можно закрыть одно поле, например цену в документе, оставив остальное доступным.

Свойства роли, которые часто упускают

В палитре свойств роли есть флажки:

  • Устанавливать права для новых объектов — новые объекты конфигурации автоматически получают все права в этой роли. Для ограничивающей роли флажок лучше снять.
  • Устанавливать права для реквизитов и табличных частей по умолчанию — при снятом флажке права на поля придётся отмечать вручную.
  • Независимые права подчинённых объектов — управляет тем, наследуют ли реквизиты права своего объекта.

Не снимайте права в типовой роли «Полные права» и не удаляйте пользователя с ней — можно потерять администратора базы.

Если конфигурация на поддержке

Чтобы не снимать базу с поддержки, роль добавляют в расширение конфигурации (расширения появились в платформе 8.3.6). Расширение содержит только вашу роль, а типовые объекты остаются нетронутыми. В БСП-конфигурациях роль из расширения затем включают в скопированный профиль групп доступа.

Запрет редактирования через профили и группы доступа

В типовых базах это основной способ. Конфигуратор не нужен, хватит прав администратора в пользовательском режиме.

Шаг 1. Подготовьте профиль

  1. Откройте Администрирование → Настройки пользователей и прав → Профили групп доступа.
  2. Найдите подходящий поставляемый профиль, например «Бухгалтер» или «Кладовщик».
  3. Поставляемые профили менять нельзя. Скопируйте нужный командой копирования в списке (F9).
  4. В копии на вкладке ролей снимите роли, дающие право изменения нужных данных. Оставьте роли чтения.
  5. Дайте профилю понятное имя: «Бухгалтер — без правки справочников».

Названия ролей в БСП говорят сами за себя: роли с «Чтение» в имени дают просмотр, с «Добавление и изменение» — правку. Перед снятием роли откройте её описание в форме профиля.

Шаг 2. Создайте группу доступа

  1. Перейдите в Администрирование → Настройки пользователей и прав → Группы доступа.
  2. Создайте группу и выберите в ней новый профиль.
  3. Добавьте участников группы.
  4. Уберите этих пользователей из групп со старым, более широким профилем. Иначе права сложатся, и запрет не сработает.

Шаг 3. Проверьте под пользователем

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

Что именно нужно запретить?

Как запретить редактировать проведённые документы

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

Дата запрета изменения данных

Механизм есть во всех БСП-конфигурациях. В БП 3.0 настройка находится в Администрирование → Проведение документов: включите флажок дат запрета и откройте настройку по ссылке рядом.

Варианты настройки:

  • 📅 общая дата для всех пользователей — самый частый случай: закрыли квартал, поставили последний день квартала;
  • 👥 отдельные даты для пользователей и групп — главному бухгалтеру можно оставить период открытым, остальным закрыть;
  • 🏢 по разделам и организациям — если в базе несколько фирм с разным графиком закрытия.

Дату можно задать относительной, например «конец прошлого месяца». Тогда её не нужно двигать вручную каждый месяц.

После настройки документ с датой раньше запретной открывается, но записать или перепровести его нельзя. Программа выдаёт сообщение о том, что данные за этот период закрыты.

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

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

Право «Интерактивное изменение проведённых»

У документа в редакторе роли есть право Интерактивное изменение проведённых. Если его нет, пользователь может создать и провести документ, но изменить уже проведённый через форму не сможет.

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

Программная блокировка формы

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Объект.Проведен
		И Не РольДоступна("ПолныеПрава")
		И ТекущаяДатаСеанса() - Объект.Дата > 3 * 86400 Тогда
		ТолькоПросмотр = Истина;
	КонецЕсли;
КонецПроцедуры

Этот код закрывает только форму. Обработка или обмен всё равно запишут документ. Для полной защиты ту же проверку ставят в модуль объекта, в обработчик ПередЗаписью с Отказ = Истина.

Ограничение доступа на уровне записей (RLS)

Роли решают, к какому объекту есть доступ. RLS (Record Level Security) решает, к каким записям этого объекта. Типичный пример: менеджер видит и правит только документы своей организации или своего склада.

В типовых конфигурациях

  1. Откройте Администрирование → Настройки пользователей и прав.
  2. Включите флажок «Ограничивать доступ на уровне записей».
  3. В профиле группы доступа на вкладке видов доступа выберите нужный вид: «Организации», «Склады», «Контрагенты» — набор зависит от конфигурации.
  4. В самой группе доступа укажите режим: «Все запрещены» плюс список разрешённых значений или «Все разрешены» плюс список запрещённых.

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

В Конфигураторе

Условие пишется в редакторе роли. Выберите объект и право («Чтение», «Изменение» и т.д.), затем внизу в поле ограничения доступа к данным введите условие на языке запросов. Упрощённый пример для документа:

ГДЕ Организация = &ТекущаяОрганизация

Здесь ТекущаяОрганизация — параметр сеанса, который нужно создать в конфигурации и заполнить при входе пользователя. В условиях RLS обращение &Имя указывает именно на параметр сеанса.

Ограничение можно поставить отдельно на «Чтение» и на «Изменение». Так пользователь будет видеть документы всех складов, а менять — только своего.

Права не срабатывают: диагностика

Самые частые жалобы — «запретил, а он всё равно правит» и «после настройки ничего не открывается». Порядок проверки:

  1. Пользователь перезашёл? Права читаются при входе. Пока сеанс открыт, работают старые.
  2. В каких группах доступа он состоит? В карточке пользователя есть список групп и отчёт по правам доступа. Найдите группу, которая даёт лишнее право.
  3. Нет ли у него «Полных прав» или профиля «Администратор»? Полные права обходят и роли, и RLS.
  4. Обновлена ли конфигурация базы данных после правки роли в Конфигураторе?
  5. Не сдвинута ли дата запрета и не стоит ли у пользователя персональная дата, которая главнее общей?
  6. Кто реально записал документ? В журнале регистрации (Администрирование → Обслуживание → Журнал регистрации) отберите события записи по объекту и посмотрите пользователя и время.

Для разработчика в Конфигураторе есть сводная матрица: правый клик по ветке «Роли» → «Все роли». Там видно, какие роли дают право на выбранный объект.

Диагностика: выберите симптом

Частые ошибки при настройке запрета

  • 🔁 Создали «запрещающую» роль и добавили её к старым. Роль может только разрешать. Права нужно снимать там, где они выданы.
  • ✂️ Сняли «Редактирование», но оставили «Изменение». Форма закрыта, а групповая обработка реквизитов или загрузка из файла от имени пользователя запишет объект.
  • 🧱 Отняли «Чтение» у справочника. Документы, где он указан в реквизитах, перестают открываться. Для правки закрывайте «Изменение», а не «Чтение».
  • 🔑 Выдали всем бухгалтерам право менять даты запрета. Закрытый период перестаёт быть закрытым.
  • 🛠 Правили поставляемую роль в Конфигураторе. После обновления правки теряются или конфликтуют при сравнении. Используйте расширение и копии профилей.
Можно ли запретить редактирование одному пользователю, не трогая остальных?
Да. Создайте копию профиля без нужных прав, отдельную группу доступа и включите в неё только этого пользователя, убрав его из прежних групп.
Действует ли запрет на администратора базы?
Роли и RLS на него не действуют: «Полные права» открывают всё. Дату запрета он может изменить сам, поэтому круг администраторов держите минимальным.
Нужен ли монопольный доступ, чтобы поменять права?
Для профилей, групп доступа и дат запрета — нет, настройка делается в рабочей базе. Для правки ролей в Конфигураторе монопольный режим нужен на шаге обновления конфигурации базы данных.
Как запретить удаление документов, но разрешить их изменение?
Снимите в роли права «Интерактивная пометка удаления» и «Интерактивное удаление», оставив «Изменение» и «Редактирование». В типовой базе понадобится своя роль в расширении.
Почему пользователь видит документ в журнале, но не может его открыть?
У него есть право на список, но нет права «Просмотр» на сам документ или на один из справочников в его реквизитах. Сообщение Нарушение прав доступа! подскажет, какого объекта касается проблема.