Версия для печати темы (https://pro1c.org.ua/index.php?s=3a78280c9c90ecb263ccdf39665a7255&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, откуда вы знаете, не зная условия ограничения? smile.gif

На подобного рода вопросы

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

можно дать единственный правильный ответ: составить некое условие, в результате которого некоторые позиции не будут видны.

Автор: Михрутка 04.02.13, 17:58

Vofka, мне всегда интересен Ваш юмор. smile.gif
Но сейчас мне интересно, как же это его задать? как указать необходимый параметр?

Автор: 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


 i 

Объединил темы
 

Автор: 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