|   |   | 
| 
 | Настройка РЛС | ☑ | ||
|---|---|---|---|---|
| 0
    
        Садовник 03.08.17✎ 12:19 | 
        Подскажите как правильно настраивать РЛС по табличным частям. В типовых конфигурациях и описаниях на ИТС указано, что делается это через связь по ссылке ТЧ и ТекущейТаблицей, но объясню свой вопрос: 
 Я настраиваю запрет доступа по выбранным подразделениям. Т.е. если у пользователя стоит запрет на определенное подразделение (именно в использовании в конкретном документе, а не вообще), то он не должен ни ввести новый, ни исправить старый документ, если в нем было (будет) хоть в одной строке указано запретное подразделение. При указанном способе происходит проверка не ТекущейТаблицы, а именно ССЫЛКИ на табличную часть. Если происходит ввод нового документа, то временная ссылка уже существует и РЛС отработает правильно. А вот при изменении существующего документа ограничения РЛС встраиваются в запрос на изменение (Update) к субд (мониторю профайлером). Т.е. изменения ссылки не происходит. Получается, что пользователю запрещено отредактировать существующий документ с запрещенным подразделением (это хорошо). НО! Разрешается в существующем документе с разрешенными подразделениями поменять подразделение на запрещенное и провести. И в этом случае РЛС будет молчать. | |||
| 1
    
        Садовник 03.08.17✎ 16:02 | 
        есть предложения?     | |||
| 2
    
        Михаил Козлов 03.08.17✎ 16:20 | 
        " НО! Разрешается в существующем документе с разрешенными подразделениями поменять подразделение на запрещенное" - дает выбрать запрещенное? РЛС на справочник подразделений стоит?     | |||
| 3
    
        _Batoo 03.08.17✎ 16:48 | 
        (2)
 "(именно в использовании в конкретном документе, а не вообще)" (0) Добавь РЛС на Добавление, Изменение. | |||
| 4
    
        Садовник 04.08.17✎ 07:24 | 
        (2) Вам правильно ответили в (3). На справочник полный доступ, т.к. эти подразделения пользователь может использовать в других документах.
 (3) Так у меня и стоит РЛС на добавление и изменение, причем одинаковое. С добавлением все отлично, а вот с изменением нет. На чтение доступ полный. P.S. Если вдруг это поможет делу, то могу привести код ограничения доступа. | |||
| 5
    
        DmitrO 04.08.17✎ 09:13 | 
        >>Получается, что пользователю запрещено отредактировать существующий документ с запрещенным подразделением (это хорошо). НО! Разрешается в существующем документе с разрешенными подразделениями поменять подразделение на запрещенное и провести. И в этом случае РЛС будет молчать.
 Что за домыслы? При изменении проверка по РЛС делается дважды, до записи и после записи. Так что все будет будет работать правильно. | |||
| 6
    
        Садовник 04.08.17✎ 09:30 | 
        (5) это не домыслы
 В профайлере смотрел. При изменении объекта к субд отправляется только один запрос на update, в котором присутствует проверка ссылки и текущего объекта (#ТекущаяТаблица). Если настраивать подобное ограничение, но на реквизит шапки, там можно поставить условие ТекущаяТаблица.Подразделение - это как раз и будет проверка "Объекта", т.е. тех данных, которые будут "после записи". Т.е. с реквизитом шапки все отлично работает: действует запрет и на изменение запрещенного документа и на установку в разрешенном документе запрещенного подразделения. | |||
| 7
    
        Dotoshin 04.08.17✎ 09:43 | 
        (6) Ну а если не в профайлере смотреть, а в 1с? Ну то есть зайли под пользователем, у которого есть ограничение по подразделениям и попробовать выбрать в существующем документе "запрещенное" подразделение. Что при этом получится?     | |||
| 8
    
        Dotoshin 04.08.17✎ 09:43 | 
        зайли=зайти     | |||
| 9
    
        Садовник 04.08.17✎ 10:02 | 
        (7) так я и тестировал до того как полез в профайлер)) На выбор запрета нет, должно сработать при проведении (изменении). Но оно не работает.
 На всякий случай приведу тексты запросов. Ограничение по ТЧ (не работает как надо) ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ГДЕ НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ТабличнаяЧастьДокумента ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователейКОбъектам КАК ПраваДоступаПользователейКОбъектам ПО ПраваДоступаПользователейКОбъектам.ОбъектДоступа = ТабличнаяЧастьДокумента.ЦентрЗатрат И ПраваДоступаПользователейКОбъектам.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОграниченияПравДоступа.ПодразделенияПлатежныеДокументыЗапрет) И ПраваДоступаПользователейКОбъектам.Пользователь В (&ГруппыТекущегоПользователя) И ПраваДоступаПользователейКОбъектам.Чтение ГДЕ ТекущаяТаблица.Ссылка = ТабличнаяЧастьДокумента.Ссылка) Ограничение по шапке (все отлично работает). ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователейКОбъектам КАК ПраваДоступаПользователейКОбъектам ПО ПраваДоступаПользователейКОбъектам.ОбъектДоступа = ТекущаяТаблица.Подразделение И ПраваДоступаПользователейКОбъектам.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОграниченияПравДоступа.ПодразделенияПлатежныеДокументыЗапрет) И ПраваДоступаПользователейКОбъектам.Пользователь В (&ГруппыТекущегоПользователя) И ПраваДоступаПользователейКОбъектам.Чтение ГДЕ ПраваДоступаПользователейКОбъектам.ОбъектДоступа Есть Null | |||
| 10
    
        Садовник 04.08.17✎ 10:05 | 
        (9) "Центр затрат" имеет составной тип, среди которых есть тип Справочник.Подразделения как и реквизит "Подразделение". Это на всякий случай сообщаю.     | |||
| 11
    
        DmitrO 04.08.17✎ 10:40 | 
        (6)если хотите сказать, что в момент записи шапки и проверки по РЛС ТЧ еще не записана и содержит старые данные, то это действительно так. Однако кроме запроса update, далее, после записи ТЧ еще идет запрос select, который и проверяет, только что записанный объект вцелом.
 У меня в базе подобные ограничения работают как надо. | |||
| 12
    
        Садовник 04.08.17✎ 10:43 | 
        (11) Можете прислать текст вашего ограничения?
 Мне именно и хочется понять где у меня затык. | |||
| 13
    
        DmitrO 04.08.17✎ 10:45 | 
        (9)>>И ПраваДоступаПользователейКОбъектам.Чтение
 мы ведь вроде изменения проверяем? | |||
| 14
    
        Садовник 04.08.17✎ 10:50 | 
        (13) Да, всё правильно. Просто для теста я решил привязаться именно к этому полю регистра сведений, т.к. ранее подобное же ограничение настраивал для чтения, чтобы убедиться, что оно работает. Суть же от этого не меняется.     | |||
| 15
    
        DmitrO 04.08.17✎ 11:22 | 
        (9)предлагаю поменять условие на такое:
 ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ГДЕ 1 НЕ В ... | |||
| 16
    
        Садовник 04.08.17✎ 12:35 | 
        (15) Не помогло(
 Можете всё таки показать часть своего кода по ограничениям на ТЧ? | |||
| 17
    
        Mkamha 04.08.17✎ 12:56 | 
        (16), на ограничение ТЧ в документах не получится сделать ограничение прав доступа красиво, чтобы пользователь не видел закрытые записи, а при записи объекта не было исключения на возможность изменения.
 Как вариант: вместо табличной части документов - использовать регистр сведений, при открытии, считывать записи (считаются уже те, которые разрешены), при записи записывать измененные. Этот вариант не для типовых конф. | |||
| 18
    
        Садовник 04.08.17✎ 13:25 | 
        (17) а мне и не надо, чтобы еще и записи скрывались. Пусть смотрит всё. 
 Просто у нас один отдел не хочет, чтобы другой отдел исправлял документы так, что это может повлиять на подчиненные подразделения первого отдела. А смотреть пожалуйста)) (11) Вы меня натолкнули на мысль по поводу select'a. Решил для простоты просто проверять запись документа (без проведения). Зашел в разрешенный документ и поменял подразделение. Update отработал. Дальше пошло DELETE FROM _Document402_VT9343 FROM _Document402_VT9343 WITH(REPEATABLEREAD) WHERE _Document402_VT9343._Document402_IDRRef = 0x8aca441ea161d8bf11e777862b109596 INSERT INTO _Document402_VT9343 WITH(REPEATABLEREAD) VALUES(_Идентификаторы_) INSERT INTO _Document402_VT9343 WITH(REPEATABLEREAD) VALUES(_Идентификаторы_) Видимо замена значения (с разрешенного на запрещенное). А потом несколько запросов по Select'у , но там нет упоминания о нужной мне ТЧ, т.е. как будто не проверяет больше. | |||
| 19
    
        Садовник 04.08.17✎ 14:34 | 
        DmitrO, а вы уверены что в запросах select (после update), идет проверки только что записанного объекта?
 Я там увидел только выборку полей шапки, где для ссылочных типов устанавливается связь с их таблицами (например с таблицей Справочник.Организации). И вот на эти таблицы в свою очередь накладываются ограничения, действующую именно на эту таблицу (РЛС к справочнику организации). По анализу профайла накладывания ограничения на реквизит шапки документа, проверка и ссылки, и новых данных происходит в одном запросе - update. Мне подсказали цитату из руководства разработчика : ? Для операции изменения ограничению доступа к данным должен соответствовать объект как до изменения (чтобы объект был прочитан), так и после изменения (чтобы объект был записан). Думаю это относится именно к проверке во время Update. Знающие люди пусть поправят. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |