Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ограничение доступа к элементам и разделам справочника.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Михрутка
Как ограничить некоторым пользователям выборочный доступ к элементам справочника номенклатура? Т.е. чтобы некоторые позиции для них были не видны? Никак не могу вкурить как создать ограничение.
logist
В Номенклатуре должен быть какой-то реквизит по которому берется ограничение, или регистр сведений где хранится зависимость ограничений.
Михрутка
Допустим такой реквизит есть, как тогда?
Vofka
logist, откуда вы знаете, не зная условия ограничения? smile.gif

На подобного рода вопросы
Цитата(Михрутка @ 04.02.13, 17:42) необходимо зарегистрироваться для просмотра ссылки
чтобы некоторые позиции для них были не видны

можно дать единственный правильный ответ: составить некое условие, в результате которого некоторые позиции не будут видны.
Михрутка
Vofka, мне всегда интересен Ваш юмор. smile.gif
Но сейчас мне интересно, как же это его задать? как указать необходимый параметр?
logist
Цитата(Михрутка @ 04.02.13, 17:58) необходимо зарегистрироваться для просмотра ссылки
как указать необходимый параметр?

Делаете РС в котором будит значится кому какое значение этого параметра будет доступно, и через RLS настраиваете доступ.
Vofka
Цитата(Михрутка @ 04.02.13, 17:58) необходимо зарегистрироваться для просмотра ссылки
Но сейчас мне интересно, как же это его задать? как указать необходимый параметр?

Сформулируйте задачу чётче, непонятно ведь ничего: есть некий реквизит и надо скрыть некий товар. Ну как это можно понять?
Михрутка
Цитата(Vofka @ 04.02.13, 19:31) необходимо зарегистрироваться для просмотра ссылки
Сформулируйте задачу чётче, непонятно ведь ничего: есть некий реквизит и надо скрыть некий товар. Ну как это можно понять?

Согласен. Замечание по существу.
Конкретизирую. Есть справочник, например, номенклатуры. В справочнике все товары и услуги разделены на 2 корневые группы, "Продажа" и "Учет". Нужно сделать так, чтобы пользователь не имеющей роли "Администрирование" не мог видеть все товары и услуги из группы "Учет". На первый взгляд задача простая, но у меня не получается. Помогите, пожалуйста. спасибо.
zay
Добавьте в перечисление ВидыОбъектовДоступа значение Номенклатура
В измерение ОбъектДоступа регистра НастройкиПравДоступаПользователей добавьте тип Номенклатура

Роли - Все ограничения доступа - Шаблоны ограничений
Добавьте шаблон:
ОграничениеНаНоменклатуру
Текст шаблона:
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица

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


Для всех основных ролей настройте RLS (используя созданный шаблон) для справочника Номенклатура

В приложении заполните регистр НастройкиПравДоступаПользователей. Для пользователей администраторов дайте права и на "Продажа" и на "Учет". Для всех остальных - только на "Продажа". (Объект доступа - это группа из справочника "Номенклатура")

Кроме прав доступа непосредственно справочника - проверьте работу отчетов, которыми пользуются пользователи. Скорее всего часть из них перестанет работать с ошибкой "Недостаточно прав доступа". Необходимо подобавлять слово РАЗРЕШЕННЫЕ в запросы.
logist
И ТекущаяТаблица.Родитель.Ссылка = ПраваДоступа.ОбъектДоступа

А ограничение будет действовать только на элементы корневой папки? Т.е. если я путем ручного ввода введу в поле ввода название элемента где-то из глубины иерархии, я же получу к нему доступ...
zay
Цитата(logist @ 05.03.13, 13:03) необходимо зарегистрироваться для просмотра ссылки
А ограничение будет действовать только на элементы корневой папки? Т.е. если я путем ручного ввода введу в поле ввода название элемента где-то из глубины иерархии, я же получу к нему доступ...

Согласен. Правильно надо писать
ТекущаяТаблица.Родитель.Ссылка = ПраваДоступа.ОбъектДоступа
ИЛИ ТекущаяТаблица.Родитель.Родитель.Ссылка = ПраваДоступа.ОбъектДоступа

Это исходя из того, что в справочнике 2 уровня иерархии. Если больше - надо будет плодить ИЛИ ....Родитель.Родитель

Воообще, ИМХО, делать ограничение по группе в которой находится элемент - неудачная идея. Помимо "некрасивого" запроса для RLS тут как минимум еще две проблемы.
1. Пользователи не всегда создают номенклатуру в правильной группе.
2. Если будут появлятся новые корневые группы - по ним надо будет настраивать права доступа.
Я бы делал ограничение через реквизит номенклатуры.
yuritch
Вот так должно работать для любой глубины вложенности:
И ТекущаяТаблица.Родитель.Ссылка В ИЕРАРХИИ (ПраваДоступа.ОбъектДоступа)

(никогда не использовал В ИЕРАРХИИ в RLS, не уверен, что такая конструкция будет работать достаточно быстро)
zay
Цитата(yuritch @ 05.03.13, 13:43) необходимо зарегистрироваться для просмотра ссылки
Вот так должно работать для любой глубины вложенности:
И ТекущаяТаблица.Родитель.Ссылка В ИЕРАРХИИ (ПраваДоступа.ОбъектДоступа)

К сожалению это работать не будет
условие В ИЕРАРХИИ работатет так:
В ИЕРАРХИИ (&ТутДолженБытьПараметр)
Михрутка
Цитата(zay @ 05.03.13, 13:27) необходимо зарегистрироваться для просмотра ссылки
Согласен. Правильно надо писать
ТекущаяТаблица.Родитель.Ссылка = ПраваДоступа.ОбъектДоступа
ИЛИ ТекущаяТаблица.Родитель.Родитель.Ссылка = ПраваДоступа.ОбъектДоступа

Это исходя из того, что в справочнике 2 уровня иерархии. Если больше - надо будет плодить ИЛИ ....Родитель.Родитель

Воообще, ИМХО, делать ограничение по группе в которой находится элемент - неудачная идея. Помимо "некрасивого" запроса для RLS тут как минимум еще две проблемы.
1. Пользователи не всегда создают номенклатуру в правильной группе.
2. Если будут появлятся новые корневые группы - по ним надо будет настраивать права доступа.
Я бы делал ограничение через реквизит номенклатуры.

Хорошо, если по группам не правильно, как лучше сделать. Как бы сделали Вы? Через какой реквизит? Т.е. нужно добавить еще один реквизит к элементу номенклатуры, ну назовем его допустим "Запрет доступа" и если реквизит установлен, то элемент не виден, а если нет, то виден. Опять таки через RLS ограничение создается. Я правильно понял Ваше предложение?
Petre
Хитрый юзер возьмет и перенесет элемент в другую группу, посмотрит реквизит и вернет обратно в начальную группу.
Вообще к группе привязываться не рекомендую.
zay
Цитата(Михрутка @ 20.03.13, 8:53) необходимо зарегистрироваться для просмотра ссылки
Хорошо, если по группам не правильно, как лучше сделать. Как бы сделали Вы? Через какой реквизит? Т.е. нужно добавить еще один реквизит к элементу номенклатуры, ну назовем его допустим "Запрет доступа" и если реквизит установлен, то элемент не виден, а если нет, то виден. Опять таки через RLS ограничение создается. Я правильно понял Ваше предложение?

Да, добавить еще один реквизит "Уровень доступа". Ссылка на справочник "Уровни доступа к номенклатуре". В справочнике "Уровни доступа к номенклатуре" два элемента: "Продажа" и "Учет".
При записи номенклатуры, если "Уровень доступа" не установлен - два варианта:
ругаться и не давать записывать
инициализация в значение "Продажа" или "Учет", в зависимости от прав пользователя, который создает номенклатуру

Дальше RLS ограничение
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица

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

Объект доступа - это элемент из справочника "Уровни доступа к номенклатуре"
Михрутка
Цитата(zay @ 20.03.13, 10:34) необходимо зарегистрироваться для просмотра ссылки
Да, добавить еще один реквизит "Уровень доступа". Ссылка на справочник "Уровни доступа к номенклатуре". В справочнике "Уровни доступа к номенклатуре" два элемента: "Продажа" и "Учет".
При записи номенклатуры, если "Уровень доступа" не установлен - два варианта:
ругаться и не давать записывать
инициализация в значение "Продажа" или "Учет", в зависимости от прав пользователя, который создает номенклатуру

Дальше RLS ограничение
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица

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

Объект доступа - это элемент из справочника "Уровни доступа к номенклатуре"

Спасибо. Сегодня попробую реализовать. Отпишусь по результату.
BBDragon
Каюсь за некропостинг, но хотелось бы узнать - как реализовать то же самое в 8.3, например УТ 11.1? Заранее спасибо!

Как ограничить некоторым пользователям выборочный доступ к элементам справочника номенклатура в УТ 11.1? Т.е. чтобы при реализации и приходовании каждой группе пользователей были доступны только свои позиции.
Была подобная тема (http://pro1c.org.ua/index.php?showtopic=10965), но там было под 8.2


 i 

Объединил темы
 
zetovich
RLS
BBDragon
zetovich @ Сегодня, 14:38 необходимо зарегистрироваться для просмотра ссылки,
Это понятно, но хотелось бы конкретный пример увидеть. C RLS дела не имел
logist
Цитата(BBDragon @ 28.06.16, 14:23) необходимо зарегистрироваться для просмотра ссылки
но там было под 8.2

В данном случае это не имеет никакой разницы, реализация RLS одинакова для 8.х

upd: объединил темы.
BBDragon
LOGIST
Спасибо! Если я правильно понял, то справочник "Уровни доступа к номенклатуре" - надо создать самому, верно?
И где можно поподробней про RLS почитать?
logist
Цитата(BBDragon @ 28.06.16, 15:28) необходимо зарегистрироваться для просмотра ссылки
справочник "Уровни доступа к номенклатуре" - надо создать самому, верно?

Да

Цитата(BBDragon @ 28.06.16, 15:28) необходимо зарегистрироваться для просмотра ссылки
где можно поподробней про RLS почитать?

В книжках по программированию, например. В вашем случае, можете посмотреть как организовано ограничение доступа к справочнику Партнеры, вам нужно тоже самое только для другого справочника, много изобретать не понадобится, т.к. шаблоны уже универсальны и в них написаны комменты.
zetovich
необходимо зарегистрироваться для просмотра ссылки
zetovich
Рекомендую подписаться там. Там много чего полезного и бесплатного выкладывают.
donbass
BBDragon @ Вчера, 14:42 необходимо зарегистрироваться для просмотра ссылки,

1) определиться с условием.
2) в поле ограничение доступа вставить это самое условие ГДЕ ....
3) в других ролях, доступных пользователю, разрешений быть не должно.
Михрутка
Цитата(BBDragon @ 28.06.16, 13:42) необходимо зарегистрироваться для просмотра ссылки
zetovich @ Сегодня, 14:38 необходимо зарегистрироваться для просмотра ссылки,
Это понятно, но хотелось бы конкретный пример увидеть. C RLS дела не имел

У меня не получилось в лоб реализовать. Может из-за того, что конфигурация переделанная и где-то что-то уже было нарушено в правах, либо что-то не понял. Пока оставил эту затею. Сделал криво и примитивно. Добавил реквизит в элемент "Номенклатура", учет и при наличии определенных прав, элемент не отображается. Криво, убого, но пока устраивает. Будет время вернусь к нормальному исполнению
BBDragon
Большое спасибо всем! Несколько дней был занят другими вопросами, теперь наконец займусь)
У меня условие следующего рода: чтобы каждая группа менеджеров могла реализовывать товары только со своих складов. Т.е. чтобы при подборе номенклатуры программа смотрела на склад и запрещала если склад не входит в список разрешенных.

Михрутка
Думал о таком решении, но в моем случае это не подходит, ибо одна и та же номенклатура может присутствовать на нескольких складах
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.