Имя: Пароль:
1C
 
Как ограничить доступ к данным
0 Aleksey1989
 
20.01.15
10:12
Добрый день. Подскажите, пжл, как побороть следующую проблему.
В конфигурации ЗУП 2.5 создаю роль с ограничением прав к реквизитам справочника "Сотрудники", в частности к реквизиту "ТарифнаяСтавка" закрываю права на просмотр и редактирование. Далее захожу под юзером, которому назначена созданная роль с урезанными правами, из справочника "Сотрудники" открываю печатную форму "Трудовой договор" и в нем почему-то указывается значение реквизита "ТарифнаяСтавка", доступ к которому я закрывал.
Стал разбираться дальше - в модуле объекта справочника "Сотрудники" есть процедура, в которой есть запрос, который и вытаскивает инфу из справочника "Сотрудники" по тарифной ставке. Почему запрос отрабатывается, ведь доступ к этому реквизиту я закрыл?
1 polosov
 
20.01.15
10:14
(0) Запрос
ВЫБРАТЬ РАЗРЕШЕННЫЕ ?
2 Aleksey1989
 
20.01.15
10:21
(1)
В запросе у меня стоит просто "Выбрать", но в этом случае должна появляться ошибка, означающая, что у пользователя нет прав на получение данных, указанных в запросе, но ни какой ошибки нет, запрос выполняется.
3 polosov
 
20.01.15
10:22
+(1) Просто есть какая-то особенность при выборе запрещенных объектов в запросе без РАЗРЕШЕННЫЕ. В зависимости от СУБД по разному отрабатываются сложные запросы. А учитывая, что в ЗУПе извращенцы любители вложенных запросов порезвились, то не исключаю что всплыла как раз эта проблема.
4 polosov
 
20.01.15
10:23
(2) http://programmist1s.ru/osobennost-razreshennyie-v-zaprose-1s/
Вот что-то подобное.
5 Aleksey1989
 
20.01.15
11:11
Пробовал указывать слово "Разрешенные" - все равно выводится ТарифнаяСтавка. Общий запрос получается следующий:
ВЫБРАТЬ Разрешенные
    ОтветственноеЛицоОрганизации.Должность КАК ДолжностьРуководителя,
    ТрудовойДоговор.НомерДоговора КАК НомерДок,
    ТрудовойДоговор.ДатаДоговора КАК ДатаДок,
    ТрудовойДоговор.Организация.НаименованиеПолное КАК ПолноеНазваниеОрганизации,
    ЕСТЬNULL(ФИООтветственныхЛиц.Фамилия + " " + ФИООтветственныхЛиц.Имя + " " + ФИООтветственныхЛиц.Отчество, ОтветственноеЛицоОрганизации.НаименованиеФизлица) КАК ФИОРуководителя,
    ЕСТЬNULL(ФИОФизЛиц.Фамилия + " " + ФИОФизЛиц.Имя + " " + ФИОФизЛиц.Отчество, ТрудовойДоговор.Физлицо.Наименование) КАК ФИОРаботника,
    ТрудовойДоговор.ДатаОкончания КАК ДатаУвольнения,
    ТрудовойДоговор.ДатаНачала КАК ДатаПриема,
    ТрудовойДоговор.Должность.Наименование КАК Должность,
    ТрудовойДоговор.ЗанимаемыхСтавок,
    ТрудовойДоговор.ИспытательныйСрок,
    ТрудовойДоговор.ПодразделениеОрганизации.Наименование КАК Подразделение,
    ВЫБОР
        КОГДА ТрудовойДоговор.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
            ТОГДА "основной работе"
        ИНАЧЕ "совместительству"
    КОНЕЦ КАК ВидЗанятости,
    ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия,
    ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер,
    ПаспортныеДанныеФизЛицСрезПоследних.ДокументДатаВыдачи,
    ВЫРАЗИТЬ(ПаспортныеДанныеФизЛицСрезПоследних.ДокументКемВыдан КАК СТРОКА(300)) КАК ДокументКемВыдан,
    АдресРегистрации.Представление КАК АдресРегистрации,
    ТелефонДомашний.Представление КАК Телефоны,
    КонтактнаяИнформация.Представление КАК АдресОрганизации,
    ТелефонОрганизации.Представление КАК ТелефоныОрганизации,
    ТрудовойДоговор.Организация.Наименование КАК НазваниеОрганизации,
    ТрудовойДоговор.Организация.ИНН + "/" + ТрудовойДоговор.Организация.КПП КАК ИНН,
    ТрудовойДоговор.ГрафикРаботы.ВидГрафика КАК ВидГрафика,
    ТрудовойДоговор.ГрафикРаботы.ДлительностьРабочейНедели КАК ДлительностьРабочейНедели,
    ТрудовойДоговор.ВидРасчета,
    ТрудовойДоговор.ТарифнаяСтавка,
    ТрудовойДоговор.ВалютаТарифнойСтавки.Наименование КАК ВалютаТарифнойСтавки,
    ТрудовойДоговор.ПерсональныеНадбавки.(
        Ссылка,
        НомерСтроки,
        Надбавка КАК Надбавка,
        Показатель1
    )
ИЗ
    Справочник.СотрудникиОрганизаций КАК ТрудовойДоговор
        ЛЕВОЕ СОЕДИНЕНИЕ ВТОтветственноеЛицо КАК ОтветственноеЛицоОрганизации
        ПО (ИСТИНА)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(
                &ДатаДокумента,
                Физлицо В
                    (ВЫБРАТЬ
                        Ответственные.Физлицо
                    ИЗ
                        ВТОтветственноеЛицо КАК Ответственные)) КАК ФИООтветственныхЛиц
        ПО (ИСТИНА)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаДокумента, Физлицо = &Физлицо) КАК ФИОФизЛиц
        ПО (ИСТИНА)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(&ДатаДокумента, Физлицо = &Физлицо) КАК ПаспортныеДанныеФизЛицСрезПоследних
        ПО (ИСТИНА)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресРегистрации
        ПО ТрудовойДоговор.Физлицо = АдресРегистрации.Объект
            И (АдресРегистрации.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресФизЛица))
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ТелефонДомашний
        ПО ТрудовойДоговор.Физлицо = ТелефонДомашний.Объект
            И (ТелефонДомашний.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонФизЛица))
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        ПО ТрудовойДоговор.Организация = КонтактнаяИнформация.Объект
            И (КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресОрганизации))
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ТелефонОрганизации
        ПО ТрудовойДоговор.Организация = ТелефонОрганизации.Объект
            И (ТелефонОрганизации.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонОрганизации))
ГДЕ
    ТрудовойДоговор.Ссылка = &СправочникСсылка
6 Aleksey1989
 
20.01.15
11:32
Поизучал я информацию на данную тему, оказывается, что RLS не работает, когда используются временные запросы. Придется по условию на принадлежность юзера к той или иной роли запрос формировать...
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.