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

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

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

Вопрос

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

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

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

Ответ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вход на сайт

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

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

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

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

E-mail или логин

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