Имя: Пароль:
1C
1С v8
Максимальное количество параметров сеанса
0 yurii-syrkin
 
21.12.14
19:45
Здравствуйте. Столкнулся с такой проблемой, выполняю проект по разграничению прав доступа. Конфигурация УАТ Рарус. Документов вроде не так уж много, но в каждом документе есть несколько ключевых реквизитов, по которым необходимо настроить разграничение доступа (например Организация, контрагент, ДоговорКонтрагента.Подразделение и т.д.) В каждом документе от 5-8 таких реквизитов. Использую RLS, эти условия должны распространяться на разные виды прав (чтение, добавление, изменение, удаление) и объединяться между собой иногда по "И", а иногда и по "ИЛИ". Пришел к тому, что бы запрос в шаблоне в зависимости от разных настроек принимал разный вид, но для этого надо добавить очень много параметров сеанса если грубо, то около 3000. Возможно ли это? И с какими проблемами есть риск столкнуться в будущем?
1 Славен
 
21.12.14
19:52
Либо изначально неправильное требование заказчика, либо неправильно предложен вариант исполнения
2 yurii-syrkin
 
21.12.14
19:59
Возможно вариант исполнения не правильный, но попробовав несколько способов я пришел к тому, что лучше всего динамически менять текст ограничения в шаблоне с помощью директив и параметров сеанса типа булево, чем использовать в запросе параметры сеанса типа фиксированный массив. Вот и получилось {ВидДокумента1...ВидДокументN}*{Чтение, Изменение, Добавление,Удаление}*КоличествоВидовРазграничения = приблизительно 3000
3 yurii-syrkin
 
21.12.14
20:02
Как еще можно выполнить эту задачу. Например, надо гибко настраивать доступ к документу "Заказ". Настройка ограничений выполняется по Организации, Контрагенту, Направлению, Ответственному, Контрагент.ОсновнойМенеджер. И сочетать эти условия по произвольной логической формуле. Например: Условие1 И Условие2 или Условие3 И Условие4
4 yurii-syrkin
 
21.12.14
20:05
Скорее всего у меня уже взгляд замылился, и наверняка можно выполнить эту задаче намного проще
5 Defender aka LINN
 
21.12.14
20:19
(0) Я бы уже на 100-м параметр начал задумываться: а не несу ли я хуйню.
А аффтар ничего, до 3000 довел.
6 yurii-syrkin
 
21.12.14
20:29
(5)Согласен полностью, затем сюда и пришел, может что-то вы предложите?
7 Defender aka LINN
 
21.12.14
20:31
(6) Отложить в сторону бутылку и таки подумать.
8 yurii-syrkin
 
21.12.14
20:49
Раз от разу вероятность того, что мне здесь помогут, снижается. Может хоть другой форум посоветуете?)
9 Defender aka LINN
 
21.12.14
20:56
(8) Тебе там тоже не помогут. Ты же вместо вопросов просто свое видение излагаешь
10 vicof
 
21.12.14
20:56
(0)Даешь 3000 ролей :)
11 yurii-syrkin
 
21.12.14
21:03
(9)Ну почему. У меня сплошные вопросы. Я же уже изложил конкретный пример и признал что вариант с 3000 параметрами немного бредовый. Просто в директивах процессора как я понял возможно использование параметров только типа булево или я ошибаюсь? А без директив процессора текст запроса всегда будет оставаться одинаково сложным
12 pessok
 
21.12.14
21:18
(0) зачем рлс, если ограничивать только данные документов?
13 Славен
 
21.12.14
21:23
(8) ну сходи на инфостарт, там тебе тоже скажут "дурачек"....
14 yurii-syrkin
 
21.12.14
21:30
(12) А что ещё можно использовать? Если, например какому либо пользователю необходимо предоставить доступ к документам только определённых контрагентов либо по определённым подразделениям в договоре контрагента?
15 yurii-syrkin
 
21.12.14
21:37
(8) Я же предложил гипотетически вариант упрощения запроса ограничения для того чтобы увеличить быстродействие, ни на чем не настаиваю. Можешь предложить свой способ, на то и форум нужен, не так ли? Мы же здесь не меня пришли обсуждать, а конкретную проблему. Например в УПП в отличии от данной задачи слишком мало способов разграничить данные иначе бы я от туда всё взял
16 pessok
 
21.12.14
21:53
(14) РС вида Пользователь-ТипЗначенияСтрокой-Значение(булево)
и ПередОТкрытием() проверяешь и ставишь Отказ
17 pessok
 
21.12.14
21:54
+(16) значение (чтототамссылка), разрешено (булево)
18 Armando
 
21.12.14
21:54
А сколько памяти надо для 3000 параметров сеанса?
19 yurii-syrkin
 
21.12.14
22:08
(16) и (17) если я правильно понял, проверка будет выполняться на уровне формы, да? А как насчет отчетов? Недоступные элементы при такой блокировке всё таки будут попадать в отчеты, так ведь? И в формах списка они тоже будут присутствовать
20 yurii-syrkin
 
21.12.14
22:09
(18) тип значения параметра сеанса булево то есть 3 кб
21 yurii-syrkin
 
21.12.14
22:10
(20) меньше даже потому что не 3 киблобайта, а 3000 бит
22 Armando
 
21.12.14
22:12
Ради интереса проверил щас. Создал 1000 параметров типа строка 10. Все инициализировал. На пару метров память выросла.
23 Zhuravlik
 
21.12.14
22:21
(22) А если к ним пообращаться в цикле?)
24 Zubek
 
21.12.14
22:23
Может так попробовать: Делаем справочник "Группы доступа". В группу доступа могут входить значения реквизитов, для которых нужно предоставить доступ и вид доступа(чтение, изменение и т.д.). Напиример: Группа доступа "Док. заказ" в группу входит "подразделение 1\чтение", "склад 2\чтение", "документ заказ\добавление". Дальше пользователю присваиваем группы доступа и пишем формирование запроса для РЛС на основании групп доступа.
25 yurii-syrkin
 
21.12.14
22:28
(24) Если нетрудно, приведите пожалуйста примерный код запроса ограничения доступа в РЛС
26 Zubek
 
21.12.14
22:41
Ограничение по реквизиту:

(
    (
        (Истина В
            (ВЫБРАТЬ ПЕРВЫЕ 1
                Истина
            ИЗ
                РегистрСведений.ДоступКОбъектам КАК Рег
                ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.ПользователиГруппы КАК Группы
                    ПО Рег.Пользователь=Группы.Ссылка
                    И Группы.Пользователь=&ТекущийПользователь
            ГДЕ
                Рег.Объект=Т.#Параметр(1)
                И Рег.Доступ
                И
                (
                    Рег.Пользователь=&ТекущийПользователь
                    ИЛИ Рег.Пользователь=ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи)
                    ИЛИ НЕ Группы.Ссылка ЕСТЬ NULL
                )
            )
        )
        И
        НЕ (Ложь В
            (ВЫБРАТЬ ПЕРВЫЕ 1
                Ложь
            ИЗ
                РегистрСведений.ДоступКОбъектам КАК Рег
                ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.ПользователиГруппы КАК Группы
                    ПО Рег.Пользователь=Группы.Ссылка
                    И Группы.Пользователь=&ТекущийПользователь
            ГДЕ
                Рег.Объект=Т.#Параметр(1)
                И НЕ Рег.Доступ
                И
                (
                    Рег.Пользователь=&ТекущийПользователь
                    ИЛИ Рег.Пользователь=ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи)
                    ИЛИ НЕ Группы.Ссылка ЕСТЬ NULL
                )
            )
        )
    )
    #Если "#Параметр(2)" <> "" #Тогда
        ИЛИ Т.#Параметр(1) ЕСТЬ NULL
        ИЛИ Т.#Параметр(1) = #Параметр(2)
    #КонецЕсли
)
27 Zubek
 
21.12.14
22:41
Ограничение по таблице:

(
    (
        (Истина В
            (ВЫБРАТЬ ПЕРВЫЕ 1
                Истина
            ИЗ
                РегистрСведений.ДоступКОбъектам КАК Рег
                ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.ПользователиГруппы КАК Группы
                    ПО Рег.Пользователь=Группы.Ссылка
                    И Группы.Пользователь=&ТекущийПользователь
            ГДЕ
                Рег.Объект=#ИмяТекущейТаблицы
                И Рег.Доступ
                И
                (
                    Рег.Пользователь=&ТекущийПользователь
                    ИЛИ Рег.Пользователь=ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи)
                    ИЛИ НЕ Группы.Ссылка ЕСТЬ NULL
                )
            )
        )
        И
        НЕ (Ложь В
            (ВЫБРАТЬ ПЕРВЫЕ 1
                Ложь
            ИЗ
                РегистрСведений.ДоступКОбъектам КАК Рег
                ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.ПользователиГруппы КАК Группы
                    ПО Рег.Пользователь=Группы.Ссылка
                    И Группы.Пользователь=&ТекущийПользователь
            ГДЕ
                Рег.Объект=#ИмяТекущейТаблицы
                И НЕ Рег.Доступ
                И
                (
                    Рег.Пользователь=&ТекущийПользователь
                    ИЛИ Рег.Пользователь=ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи)
                    ИЛИ НЕ Группы.Ссылка ЕСТЬ NULL
                )
            )
        )
    )
)
28 yurii-syrkin
 
21.12.14
22:54
Не совсем понял, а где будут храниться настройки гибкой логики условие1 или условие2 и условие3, например?
29 Zubek
 
21.12.14
23:07
Логику можно попробовать описать в запросе через "ВЫБОР КОГДА", а хранить можно хоть в справочнике хоть в регистре
30 Zubek
 
21.12.14
23:11
А вообще я бы сделал разные группы доступа для разных пользователей. т.е. если в группе доступа есть подр. 1 и подр. 2 и скл. 1 и контр. 1, то доступ даем. Как-то так. В твоем варианте задача слишком усложняется, скорее всего игра свеч не стоит, хотя ради интереса попробовать можно реализовать.
31 yurii-syrkin
 
21.12.14
23:19
Ну да, что есть, то есть. Вот используя выражение "Выбор когда" я и столкнулся с проблемой быстродействия. Эта проверка будет выполняться вне зависимости от количества применяемых условий и как следствие будет все тормозить. Вот если бы как нибудь сделать так, чтобы запрос усложнялся только в случае увеличения числа условий
32 Ksandr
 
21.12.14
23:36
Срочно покурить документооборот на предмет формирования прав доступа на уровне записей фоновым заданием и складыванием оных в особый регистр
33 yurii-syrkin
 
21.12.14
23:40
(32) Спасибо, сейчас скачаю
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший