Как настроить ограничения RLS по организации в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как настроить ограничения RLS по организации в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33752
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        Добрый день. Вопрос от коллег
        » Подскажите, как настроить ограничения всех справочников и документов по организации? Я создал все нужные группы доступа, с ограничениями по организации(RLS), но всё равно в справочниках отражаются элементы связанные с другими организациями и при создании нового элемента какого-нибудь справочника отражаются подразделения или ещё какие объекты связанные с другими организациями («

      • #33753
        bot_avaOdin — Одинэсник
        Участник

          Dimka, добрый день!

          Для корректной настройки ограничений доступа по организациям (RLS) в 1С, чтобы пользователи видели только данные своей организации и не имели доступа к данным других организаций, необходимо выполнить следующие шаги:

          ### 1. Создание и настройка групп доступа с ограничением по организации

          — В справочнике **Группы доступа** создайте группы с ограничением по организации.
          — В ограничениях доступа укажите вид доступа, например, `»Организация»`, и настройте отбор по реквизиту организации в документах и справочниках.

          ### 2. Добавление вида доступа «Организация» в общий модуль `УправлениеДоступомПереопределяемый`

          В процедуре `ПриЗаполненииВидовДоступа` добавьте вид доступа для организации:

          1C
          Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт
              // Добавляем вид доступа "Организация"
              ВидДоступа = ВидыДоступа.Добавить();
              ВидДоступа.Имя = "Организация";
              ВидДоступа.Представление = НСтр("ru='Организация'");
              ВидДоступа.ТипЗначений = Тип("СправочникСсылка.Организации");
          КонецПроцедуры
          

          После этого необходимо обновить информационную базу с параметром `/c ЗапуститьОбновлениеИнформационнойБазы`, чтобы изменения вступили в силу.

          ### 3. Настройка ограничений доступа в ролях (RLS)

          — В ролях, которые используются пользователями, добавьте ограничения доступа по организации.
          — Используйте штатные шаблоны RLS, например, `#ПоЗначениям` или `#ПоЗначениямРасширенный`.

          Пример ограничения для документа:

          1C
          #ПоЗначениям("Документ.ЗаказПокупателя", "Чтение", "",
              "Организация", "Организация", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
          

          Для справочников аналогично:

          1C
          #ПоЗначениям("Справочник.ПодразделенияОрганизаций", "Чтение", "",
              "Организация", "Организация", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
          

          Если в справочнике нет прямого реквизита «Организация», используйте расширенный шаблон с внутренним соединением на объект, где есть организация.

          ### 4. Ограничение выбора связанных объектов при создании новых элементов

          Чтобы при создании новых элементов справочников или документов в формах не отображались подразделения или другие объекты, относящиеся к другим организациям, необходимо:

          — В формах выбора (например, в реквизитах типа «Подразделение») добавить фильтр по организации, который будет брать текущую организацию пользователя из параметров сеанса или из группы доступа.
          — Для этого можно использовать параметр сеанса, например, `ТекущаяОрганизация`, который устанавливается при входе пользователя.

          Пример кода инициализации параметра сеанса:

          1C
          Процедура ИнициализацияПараметровСеанса()
              // Получаем организацию пользователя из группы доступа
              ТекущаяОрганизация = ... // логика получения организации из группы доступа или профиля
              ПараметрыСеанса.Вставить("ТекущаяОрганизация", ТекущаяОрганизация);
          КонецПроцедуры
          

          В формах выбора добавьте отбор по этому параметру:

          1C
          Отбор.Организация.Значение = ПараметрыСеанса.ТекущаяОрганизация;
          

          ### 5. Проверка и отладка

          — Используйте отчет **Проверка внедрения БСП** (если используется БСП) для выявления ошибок в настройках RLS.
          — Проверьте, что у пользователя нет нескольких ролей с конфликтующими правами (например, одна роль с ограничением, другая без).
          — Убедитесь, что все объекты, которые должны быть ограничены, добавлены в процедуры `ПриЗаполненииСписковСОграничениемДоступа` и `ПриЗаполненииВидовОграниченийПравОбъектовМетаданных` общего модуля `УправлениеДоступомПереопределяемый`.

          ### Итог

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

          Если нужна помощь с конкретным кодом или настройкой — могу помочь написать пример.

          Рекомендую посмотреть здесь:
          https://infostart.ru/1c/articles/829474/
          https://infostart.ru/1c/articles/380599/
          https://infostart.ru/1c/articles/1908621/

          Если кратко — основная ошибка в том, что ограничение по организации настроено только на уровне ролей, но не реализован фильтр в формах выбора связанных объектов, поэтому и видны данные других организаций.

          Готов помочь с конкретными примерами кода и настройками!

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С