|
Ограничение доступа к контрагентам RLS | ☑ | ||
---|---|---|---|---|
0
web_profiler
13.05.15
✎
09:24
|
Не пинайте сильно, в нете инфы полно, но у меня возникают трудности с ролями, помогите.
Суть: создал из полных прав свою роль создал регистр сведений Доступ к контрагентам (измерение-пользователь, ресурс - группа контрагентов) Помогите, пожалуйста, составить шаблон ограничений, чтобы мой пользователь видел только свою группу П.С. Обычное приложение, не пинайте - помогите |
|||
1
web_profiler
13.05.15
✎
09:29
|
Хелп!
|
|||
2
busy1
13.05.15
✎
09:32
|
// ПоЗначениям ( Таблица, Право, Модификатор, В1,П1, В2,Р2, ..., В(n), П(n)).
// № параметра: 1, 2, 3, 4, 5, 6, 7, ..., 2+n*2,3+n*2 . // Читается так: "ограничение доступа по значениям". // Параметры: // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. // 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // В(n) - Вид доступа (имя предопределённого элемента ПланВидовХарактеристик.ВидыДоступа). // Когда В(n) = "Условие" (или ""), тогда Р(n) содержит строку условия на языке запросов, например // "Т.Автор = &ТекущийПользователь", // "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. // Если по объекту с таблицей Таблица будет выполняться запись наборов значений доступа, // то условие должно проверять значения только из объекта и/или параметров сеанса, например, &ТекущийПользователь. // Когда В(n) = "ПравоЧтения" ИЛИ "ПравоДобавления" ИЛИ "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.Р(n). // П(n) - Поле значения, проверяемого по виду доступа, кроме случая В(n) = "Условие" (или ""). // Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но // необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального. // Шаблон имеет структуру: // <Общая часть условий> <Условие по группе параметров 1> И <Условие по группе параметров 2> И ... <Условие по группе параметров(n)> // Пример: // ПоЗначениям("Документ.ПоступлениеТоваровИУслуг", "Чтение", "", // "Организации","Организация", // "Поставщики","Контрагент", "","", ...) |
|||
3
web_profiler
13.05.15
✎
09:33
|
Пробую так:
Поля: Прочие поля Ограничение доступа: Контрагенты ИЗ РегистрСведений.КонтрагентыМенеджера КАК КонтрагентыМенеджера ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты ПО КонтрагентыМенеджера.ГруппаКонтрагента = Контрагенты.Ссылка ГДЕ КонтрагентыМенеджера.Менеджер = &ТекущийПользователь |
|||
4
busy1
13.05.15
✎
09:33
|
Это справка! Там есть пример. Его можно изучить сделать что то подобное, попробовать, потом отписаться, что не получатся.
|
|||
5
web_profiler
13.05.15
✎
09:34
|
(2) это и обо всём
|
|||
6
web_profiler
13.05.15
✎
09:35
|
у меня не тривиальная, на первый взгяд, задачка, справочник список "Контрагенты" - ограничить видимость (доступ) и оставить только нужную группу контрагентов
|
|||
7
Goggy
13.05.15
✎
09:42
|
(6) Озвуч конфу и версию, может ты велосипед изобретаешь...
|
|||
8
web_profiler
13.05.15
✎
09:45
|
ут 10.3
|
|||
9
web_profiler
13.05.15
✎
09:47
|
там есть роль "МенеджерПоПродажам" у него ограничение доступа на уровне записей, но к сожалению при всех настройках видны пустые папки. Мне же необходимо видеть ТОЛЬКО конкретную папку менеджера
|
|||
10
FIXXXL
13.05.15
✎
09:53
|
(9) у контра есть реквизит ГруппаДоступа, он заполнен?
|
|||
11
web_profiler
13.05.15
✎
09:54
|
есть заполнен, но это неудобно - надо заходить в каждого контрагента у устанавливать ему группу доступа
|
|||
12
web_profiler
13.05.15
✎
09:56
|
я пошел другим путем - создал регистр сведений и у него измерение - пользователь, ресурс - группа контрагентов
Теперь хочу для пользователя ограничить по группе доступ Контрагенты ИЗ РегистрСведений.КонтрагентыМенеджера КАК КонтрагентыМенеджера ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты ПО КонтрагентыМенеджера.ГруппаКонтрагента = Контрагенты.Ссылка ГДЕ КонтрагентыМенеджера.Менеджер = &ТекущийПользователь |
|||
13
FIXXXL
13.05.15
✎
10:00
|
(11) сделай один раз обработкой, по Ответственному в документах к примеру
и немного допили момент записи нового контра: если пользователь только в одной группе - пиши ее, если в нескольких - кажи окно выбора групп |
|||
14
web_profiler
13.05.15
✎
10:01
|
(13) не подходит, нужен функционал, который я описал
|
|||
15
hhhh
13.05.15
✎
10:13
|
(14) Расширение табличного поля списка справочника (Catalog list table box extension)
ПросмотрГруппИЭлементов (ViewFoldersAndItems) Использование: Чтение и запись. Описание: Тип: ИспользованиеГруппИЭлементов. Управляет просмотром групп и элементов. Доступность: Толстый клиент. Примечание: Имеет смысл только для справочника с иерархией групп и элементов. |
|||
16
web_profiler
13.05.15
✎
10:14
|
(15) в моем случае не подходит. ТОЛЬКО RLS
|
|||
17
Fregat
13.05.15
✎
10:28
|
В бухгалтерии 2.0 работает нечто подобное. Было реализовано следующим образом:
Создан регистр сведений с измерениями ГруппаКонтрагентов и Пользователь. В доступной пользователю роле, в правах на чтение добавлено ограничение: Поля: <Прочие поля> Ограничение доступа: Контрагенты ГДЕ (Контрагенты.Родитель В (ВЫБРАТЬ ГруппыДоступаКонтрагентов.ГруппаКонтрагентов.Ссылка ИЗ РегистрСведений.ГруппыДоступаКонтрагентов КАК ГруппыДоступаКонтрагентов ГДЕ ГруппыДоступаКонтрагентов.Пользователь = &ТекущийПользователь) ИЛИ Контрагенты.Ссылка В (ВЫБРАТЬ ГруппыДоступаКонтрагентов.ГруппаКонтрагентов.Ссылка ИЗ РегистрСведений.ГруппыДоступаКонтрагентов КАК ГруппыДоступаКонтрагентов ГДЕ ГруппыДоступаКонтрагентов.Пользователь = &ТекущийПользователь)) |
|||
18
hhhh
13.05.15
✎
10:30
|
(16) ну, делаешь (9) и убираешь папки через (15).
|
|||
19
web_profiler
13.05.15
✎
10:34
|
(18) а как скрыть пустые папки через "ПросмотрГруппИЭлементов" ?
|
|||
20
web_profiler
13.05.15
✎
10:43
|
(17) осталось ряд пустых групп в справочнике контрагентов и еще в отчетах выводится "объект не найден"
|
|||
21
web_profiler
13.05.15
✎
10:43
|
с продажами
|
|||
22
web_profiler
13.05.15
✎
10:44
|
(18) В базе будут одновременно работать пользователи и для каждого свои группы
|
|||
23
web_profiler
13.05.15
✎
10:44
|
так что ПросмотрГруппИЭлементов - не варитант
|
|||
24
Сметанин
13.05.15
✎
10:57
|
Контрагенты ИЗ Справочник.Контрагенты КАК Контрагенты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ КонтрагентыМенеджера.ГруппаКонтрагента ИЗ РегистрСведений.КонтрагентыМенеджера КАК КонтрагентыМенеджера ГДЕ КонтрагентыМенеджера.Менеджер = &ТекущийПользователь) КАК ВложенныйЗапрос ПО (Контрагенты.Ссылка = ВложенныйЗапрос.ГруппаКонтрагента.Родитель ИЛИ Контрагенты.Ссылка = ВложенныйЗапрос.ГруппаКонтрагента ИЛИ Контрагенты.Родитель = ВложенныйЗапрос.ГруппаКонтрагента ИЛИ Контрагенты.Родитель.Родитель = ВложенныйЗапрос.ГруппаКонтрагента ИЛИ Контрагенты.Родитель.Родитель.Родитель = ВложенныйЗапрос.ГруппаКонтрагента) |
|||
25
Fregat
13.05.15
✎
10:58
|
(20) В РС необходимо занести только те группы контрагентов, которые должен видеть пользователь. Остальные будут недоступны посредством RLS.
Если элементы недоступны, то что же вы ожидаете увидеть в отчете кроме как <Объект не найден>? |
|||
26
Лефмихалыч
13.05.15
✎
11:07
|
(24) внутреннее соединение с ВЫБРАТЬ в RLS не будет работать там, где пользователей больше 10, а контрагентов больше 1000.
1. Добавить параметр сеанса с типом ФиксированныйМассив. 2. При начале работы системы в этот фиксированный массив закладывать либо группы, либо прямо сразу ссылки на основании данных из регистра ДоступККонтрагентам 3. в РЛС фильтровать тупым ГДЕ Ссылка в (&ПараметрСеансаИзП1) ну, или в иерархии - как там веселей будет кому |
|||
27
Лефмихалыч
13.05.15
✎
11:08
|
+(26) можно при начале работы системы запузырить обработчик ожидания раз в 10 минут, чтобы обновлял фиксированный массив. Чтобы, значит, наверняка и железно
|
|||
28
web_profiler
13.05.15
✎
11:13
|
(26) помогите с кодом, все волосы повыдергивал, глаз дергаться начинает :)
|
|||
29
web_profiler
13.05.15
✎
11:15
|
Параметр сеанса "ГруппаКонтрагента" создал
|
|||
30
web_profiler
13.05.15
✎
11:16
|
В модуле сеанса, Процедура "УстановкаПараметровСеанса". Сюда надо загнать мою группу?
|
|||
31
web_profiler
13.05.15
✎
11:24
|
Процедура УстановкаПараметровСеанса()
ПараметрыСеанса.ОбщиеЗначения = Новый ХранилищеЗначения(Новый Структура); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтрагентыМенеджера.ГруппаКонтрагента |ИЗ | РегистрСведений.КонтрагентыМенеджера КАК КонтрагентыМенеджера |ГДЕ | КонтрагентыМенеджера.Менеджер = &Менеджер"; Запрос.УстановитьПараметр("Менеджер", ПараметрыСеанса.ТекущийПользователь); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Мас = Новый Массив; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Мас.Добавить(ВыборкаДетальныеЗаписи.ГруппаКонтрагента); КонецЦикла; ПараметрыСеанса.ГруппаКонтрагента = Новый ФиксированныйМассив(Мас); ПолныеПрава.ОпределитьПараметрыСеансаДляОбменаДанными(); ПолныеПрава.УстановитьПараметрыСеанса(); КонецПроцедуры // УстановкаПараметровСеанса |
|||
32
web_profiler
13.05.15
✎
11:25
|
так чтоли?
|
|||
33
web_profiler
13.05.15
✎
11:26
|
неа не так, тут еще нет Текущего Пользователя
|
|||
34
web_profiler
13.05.15
✎
11:31
|
сделал, но эта зараза все равно пустые группы выводит
|
|||
35
web_profiler
13.05.15
✎
11:33
|
ПараметрыСеанса.ОбщиеЗначения = Новый ХранилищеЗначения(Новый Структура);
ПолныеПрава.ОпределитьПараметрыСеансаДляОбменаДанными(); ПолныеПрава.УстановитьПараметрыСеанса(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтрагентыМенеджера.ГруппаКонтрагента |ИЗ | РегистрСведений.КонтрагентыМенеджера КАК КонтрагентыМенеджера |ГДЕ | КонтрагентыМенеджера.Менеджер = &Менеджер"; Запрос.УстановитьПараметр("Менеджер", ПараметрыСеанса.ТекущийПользователь); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Мас = Новый Массив; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Мас.Добавить(ВыборкаДетальныеЗаписи.ГруппаКонтрагента); КонецЦикла; ПараметрыСеанса.ГруппаКонтрагента = Новый ФиксированныйМассив(Мас); |
|||
36
web_profiler
13.05.15
✎
11:36
|
Поля - Прочие поля
Ограничение доступа - ГДЕ Ссылка в (&ГруппаКонтрагента) А как сделать В Иерархии - ругается, если пишу ГДЕ Ссылка В ИЕРАРХИИ (&ГруппаКонтрагента) |
|||
37
web_profiler
13.05.15
✎
12:35
|
Почему же, все-таки, не отрабатывает ГДЕ Ссылка В ИЕРАРХИИ (&ГруппаКонтрагента)?
|
|||
38
web_profiler
13.05.15
✎
18:05
|
а я сделал, вот так
спасибо, всем, кто помогал |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |