Версия для печати темы (https://pro1c.org.ua/index.php?s=9b95096da8b4e76672fc7328f88698ef&showtopic=10965)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Ограничение доступа к элементам и разделам справочника.
Автор: Михрутка 04.02.13, 17:42
Как ограничить некоторым пользователям выборочный доступ к элементам справочника номенклатура? Т.е. чтобы некоторые позиции для них были не видны? Никак не могу вкурить как создать ограничение.
Автор: logist 04.02.13, 17:50
В Номенклатуре должен быть какой-то реквизит по которому берется ограничение, или регистр сведений где хранится зависимость ограничений.
Автор: Михрутка 04.02.13, 17:53
Допустим такой реквизит есть, как тогда?
Автор: Vofka 04.02.13, 17:55
logist, откуда вы знаете, не зная условия ограничения?
На подобного рода вопросы
Цитата(Михрутка @ 04.02.13, 17:42)
чтобы некоторые позиции для них были не видны
можно дать единственный правильный ответ: составить некое условие, в результате которого некоторые позиции не будут видны.
Автор: Михрутка 04.02.13, 17:58
Vofka, мне всегда интересен Ваш юмор.
Но сейчас мне интересно, как же это его задать? как указать необходимый параметр?
Автор: logist 04.02.13, 19:26
Цитата(Михрутка @ 04.02.13, 17:58)
как указать необходимый параметр?
Делаете РС в котором будит значится кому какое значение этого параметра будет доступно, и через RLS настраиваете доступ.
Автор: Vofka 04.02.13, 19:31
Цитата(Михрутка @ 04.02.13, 17:58)
Но сейчас мне интересно, как же это его задать? как указать необходимый параметр?
Сформулируйте задачу чётче, непонятно ведь ничего: есть некий реквизит и надо скрыть некий товар. Ну как это можно понять?
Автор: Михрутка 05.03.13, 11:33
Цитата(Vofka @ 04.02.13, 19:31)
Сформулируйте задачу чётче, непонятно ведь ничего: есть некий реквизит и надо скрыть некий товар. Ну как это можно понять?
Согласен. Замечание по существу.
Конкретизирую. Есть справочник, например, номенклатуры. В справочнике все товары и услуги разделены на 2 корневые группы, "Продажа" и "Учет". Нужно сделать так, чтобы пользователь не имеющей роли "Администрирование" не мог видеть все товары и услуги из группы "Учет". На первый взгляд задача простая, но у меня не получается. Помогите, пожалуйста. спасибо.
Автор: zay 05.03.13, 12:12
Добавьте в перечисление ВидыОбъектовДоступа значение Номенклатура
В измерение ОбъектДоступа регистра НастройкиПравДоступаПользователей добавьте тип Номенклатура
Роли - Все ограничения доступа - Шаблоны ограничений
Добавьте шаблон:
ОграничениеНаНоменклатуру
Текст шаблона:
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК ПраваДоступа
ПО ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Номенклатура)
И ПраваДоступа.Пользователь = &ТекущийПользователь
И ТекущаяТаблица.Родитель.Ссылка = ПраваДоступа.ОбъектДоступа
ГДЕ
(НЕ ПраваДоступа.ОбъектДоступа ЕСТЬ NULL)
Для всех основных ролей настройте RLS (используя созданный шаблон) для справочника Номенклатура
В приложении заполните регистр НастройкиПравДоступаПользователей. Для пользователей администраторов дайте права и на "Продажа" и на "Учет". Для всех остальных - только на "Продажа". (Объект доступа - это группа из справочника "Номенклатура")
Кроме прав доступа непосредственно справочника - проверьте работу отчетов, которыми пользуются пользователи. Скорее всего часть из них перестанет работать с ошибкой "Недостаточно прав доступа". Необходимо подобавлять слово РАЗРЕШЕННЫЕ в запросы.
Автор: logist 05.03.13, 13:03
И ТекущаяТаблица.Родитель.Ссылка = ПраваДоступа.ОбъектДоступа
А ограничение будет действовать только на элементы корневой папки? Т.е. если я путем ручного ввода введу в поле ввода название элемента где-то из глубины иерархии, я же получу к нему доступ...
Автор: zay 05.03.13, 13:27
Цитата(logist @ 05.03.13, 13:03)
А ограничение будет действовать только на элементы корневой папки? Т.е. если я путем ручного ввода введу в поле ввода название элемента где-то из глубины иерархии, я же получу к нему доступ...
Согласен. Правильно надо писать
ТекущаяТаблица.Родитель.Ссылка = ПраваДоступа.ОбъектДоступа
ИЛИ ТекущаяТаблица.Родитель.Родитель.Ссылка = ПраваДоступа.ОбъектДоступа
Это исходя из того, что в справочнике 2 уровня иерархии. Если больше - надо будет плодить ИЛИ ....Родитель.Родитель
Воообще, ИМХО, делать ограничение по группе в которой находится элемент - неудачная идея. Помимо "некрасивого" запроса для RLS тут как минимум еще две проблемы.
1. Пользователи не всегда создают номенклатуру в правильной группе.
2. Если будут появлятся новые корневые группы - по ним надо будет настраивать права доступа.
Я бы делал ограничение через реквизит номенклатуры.
Автор: yuritch 05.03.13, 13:43
Вот так должно работать для любой глубины вложенности:
И ТекущаяТаблица.Родитель.Ссылка В ИЕРАРХИИ (ПраваДоступа.ОбъектДоступа)
(никогда не использовал В ИЕРАРХИИ в RLS, не уверен, что такая конструкция будет работать достаточно быстро)
Автор: zay 05.03.13, 13:53
Цитата(yuritch @ 05.03.13, 13:43)
Вот так должно работать для любой глубины вложенности:
И ТекущаяТаблица.Родитель.Ссылка В ИЕРАРХИИ (ПраваДоступа.ОбъектДоступа)
К сожалению это работать не будет
условие В ИЕРАРХИИ работатет так:
В ИЕРАРХИИ (&ТутДолженБытьПараметр)
Автор: Михрутка 20.03.13, 8:53
Цитата(zay @ 05.03.13, 13:27)
Согласен. Правильно надо писать
ТекущаяТаблица.Родитель.Ссылка = ПраваДоступа.ОбъектДоступа
ИЛИ ТекущаяТаблица.Родитель.Родитель.Ссылка = ПраваДоступа.ОбъектДоступа
Это исходя из того, что в справочнике 2 уровня иерархии. Если больше - надо будет плодить ИЛИ ....Родитель.Родитель
Воообще, ИМХО, делать ограничение по группе в которой находится элемент - неудачная идея. Помимо "некрасивого" запроса для RLS тут как минимум еще две проблемы.
1. Пользователи не всегда создают номенклатуру в правильной группе.
2. Если будут появлятся новые корневые группы - по ним надо будет настраивать права доступа.
Я бы делал ограничение через реквизит номенклатуры.
Хорошо, если по группам не правильно, как лучше сделать. Как бы сделали Вы? Через какой реквизит? Т.е. нужно добавить еще один реквизит к элементу номенклатуры, ну назовем его допустим "Запрет доступа" и если реквизит установлен, то элемент не виден, а если нет, то виден. Опять таки через RLS ограничение создается. Я правильно понял Ваше предложение?
Автор: Petre 20.03.13, 9:16
Хитрый юзер возьмет и перенесет элемент в другую группу, посмотрит реквизит и вернет обратно в начальную группу.
Вообще к группе привязываться не рекомендую.
Автор: zay 20.03.13, 10:34
Цитата(Михрутка @ 20.03.13, 8:53)
Хорошо, если по группам не правильно, как лучше сделать. Как бы сделали Вы? Через какой реквизит? Т.е. нужно добавить еще один реквизит к элементу номенклатуры, ну назовем его допустим "Запрет доступа" и если реквизит установлен, то элемент не виден, а если нет, то виден. Опять таки через RLS ограничение создается. Я правильно понял Ваше предложение?
Да, добавить еще один реквизит "Уровень доступа". Ссылка на справочник "Уровни доступа к номенклатуре". В справочнике "Уровни доступа к номенклатуре" два элемента: "Продажа" и "Учет".
При записи номенклатуры, если "Уровень доступа" не установлен - два варианта:
ругаться и не давать записывать
инициализация в значение "Продажа" или "Учет", в зависимости от прав пользователя, который создает номенклатуру
Дальше RLS ограничение
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК ПраваДоступа
ПО ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Номенклатура)
И ПраваДоступа.Пользователь = &ТекущийПользователь
И ТекущаяТаблица.УровеньДоступа = ПраваДоступа.ОбъектДоступа
ГДЕ
(НЕ ПраваДоступа.ОбъектДоступа ЕСТЬ NULL)
Объект доступа - это элемент из справочника "Уровни доступа к номенклатуре"
Автор: Михрутка 20.03.13, 12:26
Цитата(zay @ 20.03.13, 10:34)
Да, добавить еще один реквизит "Уровень доступа". Ссылка на справочник "Уровни доступа к номенклатуре". В справочнике "Уровни доступа к номенклатуре" два элемента: "Продажа" и "Учет".
При записи номенклатуры, если "Уровень доступа" не установлен - два варианта:
ругаться и не давать записывать
инициализация в значение "Продажа" или "Учет", в зависимости от прав пользователя, который создает номенклатуру
Дальше RLS ограничение
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК ПраваДоступа
ПО ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Номенклатура)
И ПраваДоступа.Пользователь = &ТекущийПользователь
И ТекущаяТаблица.УровеньДоступа = ПраваДоступа.ОбъектДоступа
ГДЕ
(НЕ ПраваДоступа.ОбъектДоступа ЕСТЬ NULL)
Объект доступа - это элемент из справочника "Уровни доступа к номенклатуре"
Спасибо. Сегодня попробую реализовать. Отпишусь по результату.
Автор: BBDragon 28.06.16, 12:22
Каюсь за некропостинг, но хотелось бы узнать - как реализовать то же самое в 8.3, например УТ 11.1? Заранее спасибо!
Как ограничить некоторым пользователям выборочный доступ к элементам справочника номенклатура в УТ 11.1? Т.е. чтобы при реализации и приходовании каждой группе пользователей были доступны только свои позиции.
Была подобная тема (http://pro1c.org.ua/index.php?showtopic=10965), но там было под 8.2
Автор: zetovich 28.06.16, 13:38
RLS
Автор: BBDragon 28.06.16, 13:42
zetovich @ Сегодня, 14:38 ,
Это понятно, но хотелось бы конкретный пример увидеть. C RLS дела не имел
Автор: logist 28.06.16, 14:18
Цитата(BBDragon @ 28.06.16, 14:23)
но там было под 8.2
В данном случае это не имеет никакой разницы, реализация RLS одинакова для 8.х
upd: объединил темы.
Автор: BBDragon 28.06.16, 14:28
LOGIST
Спасибо! Если я правильно понял, то справочник "Уровни доступа к номенклатуре" - надо создать самому, верно?
И где можно поподробней про RLS почитать?
Автор: logist 28.06.16, 14:46
Цитата(BBDragon @ 28.06.16, 15:28) http://pro1c.org.ua/index.php?act=findpost&pid=113914
где можно поподробней про RLS почитать?
В книжках по программированию, например. В вашем случае, можете посмотреть как организовано ограничение доступа к справочнику Партнеры, вам нужно тоже самое только для другого справочника, много изобретать не понадобится, т.к. шаблоны уже универсальны и в них написаны комменты.
Автор: zetovich 28.06.16, 14:57
http://pro1c.org.ua/redirect.php?http://xn----1-bedvffifm4g.xn--p1ai/news/rls-data-access-restrictions/
Автор: zetovich 28.06.16, 16:30
Рекомендую подписаться там. Там много чего полезного и бесплатного выкладывают.
Автор: donbass 29.06.16, 13:19
BBDragon @ Вчера, 14:42 ,
1) определиться с условием.
2) в поле ограничение доступа вставить это самое условие ГДЕ ....
3) в других ролях, доступных пользователю, разрешений быть не должно.
Автор: Михрутка 30.06.16, 11:07
Цитата(BBDragon @ 28.06.16, 13:42) http://pro1c.org.ua/index.php?act=findpost&pid=113912,
Это понятно, но хотелось бы конкретный пример увидеть. C RLS дела не имел
У меня не получилось в лоб реализовать. Может из-за того, что конфигурация переделанная и где-то что-то уже было нарушено в правах, либо что-то не понял. Пока оставил эту затею. Сделал криво и примитивно. Добавил реквизит в элемент "Номенклатура", учет и при наличии определенных прав, элемент не отображается. Криво, убого, но пока устраивает. Будет время вернусь к нормальному исполнению
Автор: BBDragon 11.07.16, 10:08
Большое спасибо всем! Несколько дней был занят другими вопросами, теперь наконец займусь)
У меня условие следующего рода: чтобы каждая группа менеджеров могла реализовывать товары только со своих складов. Т.е. чтобы при подборе номенклатуры программа смотрела на склад и запрещала если склад не входит в список разрешенных.
Михрутка
Думал о таком решении, но в моем случае это не подходит, ибо одна и та же номенклатура может присутствовать на нескольких складах
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua