[ Вопрос дня ] Как при помощи RLS реализовать право изменения определенного списка номенклатуры только для части пользователей?

Доброго дня, коллеги!

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

Тема актуальна уже много лет. Интерес к ней у слушателей не ослабевает.

Вопрос

Имеется такая задача: есть ветка номенклатуры, которая привязана к магазину, и всю номенклатуру в этой группе и подгруппах необходимо разрешить изменять только одному-двум пользователям.

У соответствующей роли можно убрать галку прав на чтение. Но как сделать, чтобы эти правила распространялись только на группу магазин, а не блокировали абсолютно все?

Спасибо за помощь и видео, очень интересно!

Ответ

Предлагаю сделать регистр сведений РазрешеннаяНоменклатура, куда записывать все номенклатуры, которые можно изменять указанным пользователям.

Например, в регламентном задании выбираем номенклатуры из определенных групп, записываем в регистр. Получается что-то похожее на состав сегментов номенклатуры из УТ 11.

Затем в роли для справочника Номенклатура для права Изменение прописать ограничение доступа, например, вот так:

Номенклатура ГДЕ Номенклатура.Ссылка В
            (ВЫБРАТЬ
                РазрешеннаяНоменклатура.Номенклатура КАК Номенклатура
            ИЗ
                РегистрСведений.РазрешеннаяНоменклатура КАК РазрешеннаяНоменклатура)

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

Комментарий слушателя

Спасибо за совет, сделал, как вы сказали, все работает! Единственное, не смог самостоятельно доработать. Я в регистр сведений ЗапрещеннаяНоменклатура добавил измерение ЗапрещеннаяНоменклатура с типом данных СправочникСсылка.Номенклатура, установил свойство ВыборГрупп, создал форму регистра и выставил тип ВыборГрупп.

Это все работает, выбираются только группы, как и нужно. Единственное, не понимаю, как доработать условие в роли для права Изменение. Нужно запретить редактирование всего, что есть в регистре сведений, по группам.

Комментарий тренера

Отлично, что заработало! Поскольку в регистре хранятся группы номенклатуры, а не элементы, то будем работать с реквизитом Родитель. Ограничение доступа может выглядеть, например, вот так:

Номенклатура ГДЕ НЕ Номенклатура.Родитель В
            (ВЫБРАТЬ
                ЗапрещеннаяНоменклатура.Номенклатура КАК Номенклатура
            ИЗ
                РегистрСведений.ЗапрещеннаяНоменклатура КАК ЗапрещеннаяНоменклатура)

Комментарий слушателя

Добрый человек, все работает как нужно и спасибо еще раз за помощь! Вы крутые!

Единственное, пользователи нашли лазейку: они создают новую номенклатуру в разрешенных местах и перемещают в запрещенную группу. Следовательно в запрещенной группе ее можно править.

Не могу понять, куда добавить наше условие: “при перемещении смотреть ограничение на запрещенные группы”.

Комментарий тренера

Поскольку перемещение номенклатуры в другую папку – это запись в базу, для справочника Номенклатура нужно создать ограничение доступа для права Изменение:

Номенклатура ГДЕ НЕ Номенклатура.Родитель В
            (ВЫБРАТЬ
                ЗапрещеннаяНоменклатура.Номенклатура КАК Номенклатура
            ИЗ
                РегистрСведений.ЗапрещеннаяНоменклатура КАК ЗапрещеннаяНоменклатура)

Добавить комментарий

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

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.