Роль 1С — объект конфигурации, в котором собран набор прав: какие данные пользователь может читать и менять, какие документы проводить, какие команды видит в интерфейсе. Пользователю назначают одну или несколько ролей, платформа складывает их права и проверяет при каждом обращении к данным.
Когда до ролей доходит дело:
Роли 1С 8.3 хранятся в ветке «Общие → Роли». Внутри роли — матрица «объекты × права» и шаблоны ограничения доступа на уровне записей. Главные правила:
ЗаведениеНоменклатуры, и понятный синоним — его увидит администратор.Внизу редактора роли есть флажки, влияющие на будущие доработки:
Права роли 1С делятся на две группы. Основные — «Чтение», «Добавление», «Изменение», «Удаление», у документов еще «Проведение» и «Отмена проведения» — действуют на уровне данных, их проверяет любой код, включая запросы. Интерактивные — «Просмотр», «Редактирование», «Интерактивное добавление» и другие — касаются только работы через формы. Без основного права интерактивное не работает: без «Чтения» нет и «Просмотра».
| Что должен делать пользователь | Какие права отметить |
|---|---|
| Только смотреть справочник | Чтение, Просмотр, Ввод по строке |
| Заводить и править элементы | плюс Добавление, Изменение, Интерактивное добавление, Редактирование |
| Помечать на удаление | плюс Интерактивная пометка удаления, Интерактивное снятие пометки удаления |
| Проводить документы | плюс Проведение, Отмена проведения, Интерактивное проведение, Интерактивная отмена проведения, Интерактивное изменение проведенных (без него проведенный документ не исправить); если у документа разрешено оперативное проведение — Интерактивное проведение неоперативное; Чтение и Изменение на регистры движений |
| Запускать отчет или обработку | Использование, Просмотр |
Отдельные права есть у корня конфигурации: запуск клиентов (тонкого, веб-, толстого), «Администрирование», «Сохранение данных пользователя», «Вывод», открытие внешних обработок и отчетов. Без права на клиент пользователь не войдет в программу, а открытие внешних файлов выдают осторожно — см. статью про внешние обработки.
У реквизитов и табличных частей в редакторе роли свои флажки «Просмотр» и «Редактирование». Сняли «Редактирование» у реквизита «Цена» — поле нельзя изменить, сняли «Просмотр» — пользователь его не увидит. Это интерактивные права: они управляют формами, а не хранением. Закрытые данные (себестоимость, оклады) держите в отдельном регистре со своими правами или закрывайте ограничением на уровне записей.
Для прав «Чтение», «Добавление», «Изменение» и «Удаление» можно задать условие на языке запросов (RLS): например, менеджер видит документы только своей организации. На проведение и интерактивные права условие не ставится. Запросы к таким данным пишут с ВЫБРАТЬ РАЗРЕШЕННЫЕ, иначе недоступная запись в выборке даст «Нарушение прав доступа!». В типовых шаблоны ограничений уже есть в ролях, а организации и склады задаются в группах доступа — см. статью о правах доступа 1С.
В БП 3.0, УТ 11, ERP, КА 2 и УНФ права раздает подсистема «Управление доступом» из БСП. Роли собраны в профили групп доступа («Бухгалтер», «Менеджер по продажам»), пользователь входит в группу доступа, а БСП сама выставляет ему роли. Роль, добавленная вручную в конфигураторе, продержится только до пересчета групп доступа.
Типичные роли на БСП:
ПолныеПрава и АдминистраторСистемы — у администратора;БазовыеПраваБСП — минимум для работы общих механизмов;ЗапускТонкогоКлиента, ЗапускВебКлиента — вход через нужный клиент;ВыводНаПринтерФайлБуферОбмена, СохранениеДанныхПользователя, ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок — права корня, вынесенные в отдельные роли.Состав зависит от версии БСП. Править типовые роли можно, только включив возможность изменения конфигурации, — и потом объединять вручную каждое обновление. Надежнее своя роль в расширении.
Расш1_, платформа подставит к новым объектам.Расш1_ИзменениеЦен, и отметьте права на заимствованные и собственные объекты расширения.Две оговорки. Собственная роль расширения не выдает права корня конфигурации («Администрирование», запуск клиентов) — их дают типовые роли профиля. А если расширение работает в безопасном режиме под профилем безопасности кластера, без флага полного доступа «к расширению прав доступа» и с пустым полем «Роли, ограничивающие расширение прав доступа» его роли не добавят прав на объекты конфигурации.
Роль расширения «не работает» — проверьте по порядку: есть ли роль в профиле группы доступа, активно ли расширение и применилось ли без ошибок, перезапущен ли сеанс, а при профилях безопасности — настройки профиля.
С 8.3.9 права можно менять и в заимствованной типовой роли: флажок права в ней имеет три состояния — «значение из расширяемой роли» (по умолчанию), установлен, снят. Снятый флажок отбирает право у этой роли без снятия типовой с поддержки. Новые права нагляднее выдавать своей ролью через профиль.
Серверный модуль ниже отвечает на вопрос «почему кладовщик меняет цены»: какие роли дают право на объект и из какой роли оно у пользователя. Плюс назначение роли в конфигурациях без БСП.
// Общий модуль «ПраваДоступаСервер».
// Свойства модуля: Сервер = Истина, остальные флажки сняты.
// Платформа 8.3.6 и выше (СтрШаблон). Вызывать в серверном контексте:
// объекты метаданных между клиентом и сервером не передаются.
// Возвращает имена ролей (включая роли подключенных расширений),
// которые дают указанное право на объект метаданных.
// Пример: РолиСПравом("Изменение", Метаданные.Справочники.Номенклатура)
Функция РолиСПравом(ИмяПрава, ОбъектМетаданных) Экспорт
ИменаРолей = Новый Массив;
Для Каждого Роль Из Метаданные.Роли Цикл
Если ПравоДоступа(ИмяПрава, ОбъектМетаданных, Роль) Тогда
ИменаРолей.Добавить(Роль.Имя);
КонецЕсли;
КонецЦикла;
Возврат ИменаРолей;
КонецФункции
// Отвечает на вопрос «из какой роли у пользователя это право».
// Нужны права администратора или привилегированный режим.
Функция РолиПользователяСПравом(ИмяПользователя, ИмяПрава, ОбъектМетаданных) Экспорт
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
Если ПользовательИБ = Неопределено Тогда
ВызватьИсключение СтрШаблон("Пользователь ИБ ""%1"" не найден", ИмяПользователя);
КонецЕсли;
ИменаРолей = Новый Массив;
Для Каждого Роль Из ПользовательИБ.Роли Цикл
Если ПравоДоступа(ИмяПрава, ОбъектМетаданных, Роль) Тогда
ИменаРолей.Добавить(Роль.Имя);
КонецЕсли;
КонецЦикла;
Возврат ИменаРолей;
КонецФункции
// Только для конфигураций без БСП: добавляет роль пользователю ИБ.
// В типовых на БСП роли выдаются профилями групп доступа,
// и роль, добавленная этим способом, будет перезаписана.
Процедура ДобавитьРольПользователю(ИмяПользователя, ИмяРоли) Экспорт
Роль = Метаданные.Роли.Найти(ИмяРоли);
Если Роль = Неопределено Тогда
ВызватьИсключение СтрШаблон("Роль ""%1"" не найдена в конфигурации", ИмяРоли);
КонецЕсли;
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
Если ПользовательИБ = Неопределено Тогда
ВызватьИсключение СтрШаблон("Пользователь ИБ ""%1"" не найден", ИмяПользователя);
КонецЕсли;
Если ПользовательИБ.Роли.Содержит(Роль) Тогда
Возврат;
КонецЕсли;
ПользовательИБ.Роли.Добавить(Роль);
ПользовательИБ.Записать();
// Новый состав ролей пользователь получит при следующем входе.
КонецПроцедуры
Что важно в этом коде:
ПравоДоступа(ИмяПрава, ОбъектМетаданных, Роль) — третий параметр спрашивает не про текущего пользователя, а про конкретную роль. Имя права — строкой: «Чтение», «Изменение», «Просмотр», «Проведение», «Использование».Метаданные.Роли включает роли подключенных расширений.Вызов из серверной процедуры обработки или консоли кода:
// Серверная процедура обработки или консоль кода (8.3.6+ для СтрСоединить).
Роли = ПраваДоступаСервер.РолиСПравом("Изменение", Метаданные.Справочники.Номенклатура);
Сообщить("Изменение номенклатуры дают роли: " + СтрСоединить(Роли, ", "));
В формах проверяйте право, а не имя роли: РольДоступна("Расш1_ИзменениеЦен") сломается, когда право переедет в другую роль, а ПравоДоступа учитывает все роли пользователя.
// Модуль формы документа. Имена регистра и элементов формы — примерные,
// подставьте свои.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Проверяем право, а не имя роли: право может прийти из любой роли,
// в том числе из роли расширения.
МожноМенятьЦены = ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ЦеныНоменклатуры);
Элементы.ФормаПерезаполнитьЦены.Видимость = МожноМенятьЦены;
Элементы.ТоварыЦена.ТолькоПросмотр = Не МожноМенятьЦены;
КонецПроцедуры
В конфигурациях на БСП есть Пользователи.РолиДоступны(ИменаРолей, Пользователь = Неопределено, УчитыватьПривилегированныйРежим = Истина). Она возвращает Истина, если есть хотя бы одна из перечисленных через запятую ролей, полные права или (при учете) привилегированный режим, так что проверку «есть все роли» на ней не построить. Сигнатуру сверьте со своей версией БСП.
РАЗРЕШЕННЫЕ: у администратора все работает, у менеджера — «Нарушение прав доступа!».Запрещающих флажков нет: права всех ролей пользователя складываются. Отобрать право можно, убрав роль, которая его дает, разделив роль на две или сняв флажок в заимствованной роли расширения (8.3.9+, типовая остается на поддержке). Если то же право дает другая роль, оно останется.
В конфигураторе — «Администрирование → Пользователи», вкладка «Прочие». В типовых на БСП — группы доступа в карточке пользователя и отчет «Права доступа». Из кода — перебором коллекции Роли пользователя ИБ на сервере:
// Сервер: консоль кода или серверная процедура обработки.
// Нужно право «Администрирование» или привилегированный режим.
ИмяПользователя = "Кладовщик";
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
Если ПользовательИБ <> Неопределено Тогда
Для Каждого Роль Из ПользовательИБ.Роли Цикл
Сообщить(Роль.Имя + " — " + Роль.Синоним);
КонецЦикла;
КонецЕсли;
Из какой роли пришло конкретное право, покажет функция РолиПользователяСПравом выше.
Роль — объект конфигурации, ее создает программист. Профиль — элемент справочника БСП: набор ролей плюс виды ограничений доступа. Профили администратор собирает сам из готовых ролей.
Нет, обновление расширение не трогает. Но если заимствованный объект переименуют или удалят, расширение может перестать применяться — после обновления проверьте его.
Практичнее мелкие роли под одну функцию — «Изменение цен», «Проведение возвратов»: из них проще собирать профили под должности. Большая роль «на отдел» быстро обрастает исключениями.
Разложить права по должностям в типовой, закрыть цены или себестоимость на уровне записей, выяснить, откуда у сотрудника лишние права, — работа для программиста, который регулярно имеет дело с БСП. Оставьте заявку на странице настройки прав доступа 1С или сразу разместите задачу — оценка бесплатная, ответ в течение рабочего дня.
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.