← Назад к вопросам

Настройка прав доступа для групп пользователей

2.0 Middle🔥 241 комментариев
#RLS и права#Стандарты разработки

Условие

Настройте систему прав доступа для разных групп пользователей.

Группы пользователей:

  1. Менеджеры по продажам

    • Просмотр и создание документов продаж
    • Просмотр справочников
    • Нет доступа к себестоимости и закупочным ценам
  2. Кладовщики

    • Просмотр и создание складских документов
    • Только свой склад (RLS)
    • Нет доступа к ценам
  3. Бухгалтеры

    • Полный доступ к регламентированному учёту
    • Просмотр всех документов

Задание

Создайте роли, настройте права и реализуйте RLS для кладовщиков.

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение: Настройка прав доступа для групп пользователей

Определение ролей в конфигураторе

1. Менеджер по продажам

  • Документ Продажа: создание, редактирование
  • Справочник Номенклатура: просмотр
  • Справочник Контрагенты: просмотр
  • Запрет на поля: Себестоимость, ЗакупочнаяЦена

2. Кладовщик

  • Документ ПриходПостав: создание, редактирование
  • Документ РасходМатериалов: создание, редактирование
  • RLS по складу
  • Запрет на просмотр цен

3. Бухгалтер

  • Регламентированный учёт: полный доступ
  • Все справочники: просмотр
  • Все документы: полный доступ

Реализация RLS (Row-Level Security)

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

Использование RLS в запросах

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

Скрытие конфиденциальных данных

Процедура ПередЧтением()
    
    ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
    
    // Проверяем роли
    ЕстьРольМенеджера = ТекущийПользователь.Роли.Содержит(
        Метаданные.Роли.МенеджерПоПродажам
    );
    
    ЕстьРольКладовщика = ТекущийПользователь.Роли.Содержит(
        Метаданные.Роли.Кладовщик
    );
    
    // Для менеджера скрываем себестоимость
    Если ЕстьРольМенеджера Тогда
        Для каждого СтрокаТовара Из Товары Цикл
            СтрокаТовара.Себестоимость = 0;
            СтрокаТовара.ЗакупочнаяЦена = 0;
        КонецЦикла;
    КонецЕсли;
    
    // Для кладовщика скрываем все цены
    Если ЕстьРольКладовщика Тогда
        Для каждого СтрокаТовара Из Товары Цикл
            СтрокаТовара.Цена = 0;
            СтрокаТовара.Сумма = 0;
            СтрокаТовара.Себестоимость = 0;
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры

Проверка прав перед операциями

Процедура ПередЗаписью(Отказ)
    
    ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
    
    // Только бухгалтеры могут редактировать
    Если НЕ ТекущийПользователь.Роли.Содержит(
        Метаданные.Роли.Бухгалтер
    ) Тогда
        ОбщегоНазначения.СообщитьОбОшибке(
            "У вас нет прав на редактирование документов"
        );
        Отказ = Истина;
    КонецЕсли;
    
КонецПроцедуры

Ключевые компоненты

Три уровня контроля:

  • Роли и права в конфигураторе
  • RLS через параметры сеанса
  • Скрытие полей через ПередЧтением

RLS реализация:

  • Параметр сеанса для хранения склада
  • Динамическая фильтрация в запросах
  • Применяется на уровне чтения данных

Защита данных:

  • Менеджеры не видят себестоимость
  • Кладовщики не видят цены
  • Бухгалтеры видят всё
Настройка прав доступа для групп пользователей | PrepBro