Дешевый и сердитый RLS на склады

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

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

Завел специальную роль, в которой буду прописывать RLS на чтение.

Задача осложняется тем, что у всех пользователей полные права, настройка прав не была своевременно сделана, а сейчас делать некогда.

Поэтому для полных прав я пишу отключение прав на чтение через запрос «ГДЕ ЛОЖЬ»:

Для RLS-роли для документа «Реализация товаров» пишу такое ограничение доступа:

РеализацияТоваровУслуг ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
 ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.дор_СкладыПользователей КАК дор_СкладыПользователей
     ПО Пользователь = &ТекущийПользователь И (дор_СкладыПользователей.Склад = РеализацияТоваровУслуг.Склад ИЛИ     дор_СкладыПользователей.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))

После этого захожу в 1С и весь журнал документов пустой.

Добавляю Администратору доступ к основному складу:

Но после этого документы не появились. Вспомнил, что забыл добавить эту роль в права доступа.

Добавил роль, перезашел в 1С, и теперь пользователь видит реализации только по основному складу.

Аналогично и для регистра «Товары на складах», отключаю доступ для полных прав и других ролей, которые используются у пользователей через «ГДЕ ЛОЖЬ»:

RLS на чтение выглядит так:

ТоварыНаСкладах ИЗ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
 ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.дор_СкладыПользователей КАК дорСкладыПользователей
     ПО Пользователь = &ТекущийПользователь И (дорСкладыПользователей.Склад = ТоварыНаСкладах.Склад ИЛИ
    
дорСкладыПользователей.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))

Захожу в отчет «Ведомость по товарам на складах», показывает остатки только по выбранным складам.

Дополнительно делаю такую же настройку RLS для поступлений, здесь нюанс в том, что реквизит склада называется по другому:

ПоступлениеТоваровУслуг ИЗ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
 ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.дор_СкладыПользователей КАК дор_СкладыПользователей
     ПО Пользователь = &ТекущийПользователь И (дор_СкладыПользователей.Склад = ПоступлениеТоваровУслуг.СкладОрдер ИЛИ     дор_СкладыПользователей.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))

Объем факт: 0.8 час. Среда: УТ 10.3.33.1.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 2

  1. Zuko:

    Как сломать типовые механизмы и прогнуть клиента под себя?

Добавить комментарий для Zuko Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *