Ограничение прав на уровне записей начиная с определенной даты

1. 20tanush 04.08.15 09:01 Сейчас в теме
Добрый день!
Возникла необходимость ограничить доступ пользователей к одной из организаций в БД Управление Торговлей 10.3. причем старые документы, созданные до определенной даты, должны быть по-прежнему всем доступны. Есть ли возможность сделать такое ограничение, применяя RLS?
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Kom-off 04.08.15 09:05 Сейчас в теме
(1) Если иметь ввиду сам механизм RLS и допустить возможность изменения конфигурации для этих целей, а также, провести разработку, то можно. Если иметь ввиду типовой функционал УТ, то точно сказать не могу, но думаю, что нет.
4. amaksimov 04.08.15 10:59 Сейчас в теме
(1) 20tanush, я думаю дорабатывать не очень много. В типовом наверняка нельзя.
10. 20tanush 05.08.15 18:55 Сейчас в теме
Вот что получилось.
Хотела выделить цветом или шрифтом, но что-то не хочет выделяется. 10-ая строка кода добавлена (пока дату указываю в явном виде, на этапе тестирования):
##Если &ИспользоватьОграниченияПравДоступаНаУровнеЗаписей ##Тогда
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
        СоставГруппы.Ссылка КАК ГруппаПользователей
    ИЗ
        Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
    ГДЕ
        СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
    ПО (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей)
И (ТекущаяТаблица.Дата < ДАТАВРЕМЯ(2015, 8, 1))
ГДЕ (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = ЛОЖЬ
            ИЛИ (НЕ 1 В
                    (ВЫБРАТЬ ПЕРВЫЕ 1
                        1 КАК ПолеОтбора
                    ИЗ
                        РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа
                    ГДЕ
                        НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
                        И ВЫБОР
                            КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                            	И ТекущаяТаблица.#Параметр(1) ССЫЛКА Справочник.Организации
                            	И НЕ ТекущаяТаблица.#Параметр(1) = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
                                ТОГДА ВЫБОР
                                        КОГДА 1 В
                                                (ВЫБРАТЬ ПЕРВЫЕ 1
                                                    1
                                                ИЗ
                                                    (ВЫБРАТЬ
                                                        1 КАК ПолеОтбора
                                                    ) КАК Оптмизация ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
                                                        ПО
                                                            НастройкиПравДоступаПользователей.ОбъектДоступа = ТекущаяТаблица.#Параметр(1)
                                                                И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                                                                И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей
                                                                    ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
                                                                И НастройкиПравДоступаПользователей.Запись = ИСТИНА)
                                            ТОГДА ИСТИНА
                                        ИНАЧЕ ЛОЖЬ
                                    КОНЕЦ
                            КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
                            	И ТекущаяТаблица.#Параметр(2) ССЫЛКА Справочник.Контрагенты
                            	И НЕ ТекущаяТаблица.#Параметр(2) = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                                ТОГДА ВЫБОР
                                        КОГДА 1 В
                                                (ВЫБРАТЬ ПЕРВЫЕ 1
                                                    1
                                                ИЗ
                                                    Справочник.Контрагенты КАК Контрагенты ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
                                                        ПО
                                                            НастройкиПравДоступаПользователей.ОбъектДоступа = Контрагенты.ГруппаДоступаККонтрагенту
                                                                И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
                                                                И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей
                                                                    ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
                                                                И НастройкиПравДоступаПользователей.Запись = ИСТИНА
                                                ГДЕ
                                                    Контрагенты.Ссылка = ТекущаяТаблица.#Параметр(2))
                                            ТОГДА ИСТИНА
                                        ИНАЧЕ ЛОЖЬ
                                    КОНЕЦ
                            ИНАЧЕ ИСТИНА
                        КОНЕЦ = ЛОЖЬ))
                        И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL)
##КонецЕсли
Показать
13. EvilDoc 176 21.08.15 16:10 Сейчас в теме
(10) 20tanush, По твоему примеру если Дата документа меньше твоей даты то не произойдет соядинения с группами - в таком случае данные старого периода будут недоступны. Удали свое условие по дате и добавь как в (12)
20tanush; +1 Ответить
3. reazek 04.08.15 09:26 Сейчас в теме
В типовой конфигурации нет, такого сделать не возможно без существенных доработок.
5. 20tanush 04.08.15 13:11 Сейчас в теме
Да, я спрашиваю именно если дорабатывать, то можно ли это сделать через RLS?
6. amaksimov 04.08.15 13:43 Сейчас в теме
(5) 20tanush, можно там немного
там есть константа, включен ли вообще RLS (в самих RLS участвует эта константа, если не ошибаюсь)
Вот её можно заменить на обращение к дате (дату можно в параметры сеанса в модуле сеанса переносить из константы или где там она задана, из регистра)
8. reazek 05.08.15 09:13 Сейчас в теме
(6) полностью согласен, оч хороший вариант.Наверное самый "красивый" и с наименьшим количеством геммороя.
7. progr-2008 118 04.08.15 23:28 Сейчас в теме
(5) 20tanush, если RLS доработать, можно, конечно.
Лучше бы индивидуально по объектам посмотреть.
9. 20tanush 05.08.15 14:11 Сейчас в теме
Уточню, может я сначала неполно объяснила задачу. Группе менеджеров надо установить запрет на создание новых документов, начиная с даты XXX, причем редактирование документов, созданных до даты XXX должно остаться им доступным.

Не поняла пока, как это написать в ограничениях прав. Например, документ реализация, права на запись ограничиваются шаблоном ОрганизацияВШапкеКонтрагентВШапке_Запись. Получается надо редактировать этот шаблон?
11. EvilDoc 176 21.08.15 16:06 Сейчас в теме
в типовом РЛС перед условиями "Т ГДЕ..." добавь просто "Т ГДЕ ДАТА < &ТвояДата ИЛИ..."
И параметр сеанса "ТвояДата" создай.
12. EvilDoc 176 21.08.15 16:07 Сейчас в теме
"...ГДЕ ДАТА < &ТвояДата ИЛИ (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = ЛОЖЬ..."
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот