Продвинутый курс. Занятие №4

Приступайте к четвертому занятию продвинутого курса.

ps. На этой странице не нужно отчитываться о выполнении ДЗ.

комментария 4 на “Продвинутый курс. Занятие №4”

  1. Блок 0 Задание 4
     
       Задание №1
    Для пользователя  Аудитор  создаем роль Аудитор. В корневом разделе Права снимаем разрешение на все режимы , кроме разрешения работы  с тонким клиентом ,веб-клиентом, толстым клиентом. Право  Вывод  разрешает вывод информации   на печать, сохранять в файл, копирование в буфер обмена. Это право  у роли Аудитор  отсутствует. На  объекты  конфигурации  справочники, документы,
    журналы документов, отчеты ,планы счетов, планы видов характеристик  установлены права  Чтенте и Просмотр.
     
    Задание №2 .
     
    Создан регистр сведений ДоступКНоменклатуре, непериодический, режим записи Независимый.
    Измерения: Пользователь  – тип спр.ссылка Пользователи, РазрНоменклатура  – тип  спр.ссылка Номенклатура.
    Создана  ФормаЗаписи рег.сведений ДостукНоменклатуре.На форме в свойствах Использование режим  ВыборГруппИЭлементов   установлен  в значение ВыборГруппИЭлементов.
    Регистр сведений ДостпкНоменклатуре свключен в подсистему Сервис.
     
    Созданы параметры сеанса:
      ЕстьОгранимченияПоНоменклатуре  тип данных – Булево,
      РазрешеннаяНоменклатура  тип данных –  Фиксированный массив
      ЗапрещеннаяНоменклатура   тип данных – ФиксированныйМассив.
     
    В  общем модуле  ПроверкаПользователя  (свойства Сервер  и  ВызовСервера  установлен в Истина) созданы  экспортные функции    ПолучитьРазрешеннуюНаНоменклатуру(), ПолучитьЗапрещеннуюНаНоменклатуру()
     
    <code>
     
    Функция СинхронизацияПользователей() Экспорт
     
                    ТекущийПользоваетель=ПользователиИнформационнойБазы.ТекущийПользователь();
                    ГУИД=ТекущийПользоваетель.УникальныйИдентификатор;
                   
                    Пользователь=Справочники.Пользователи.НайтиПоРеквизиту(“ПользовательИБ”,ГУИД);
                   
                    Если Пользователь.Пустая() Тогда
                                    НовыйПользователь=Справочники.Пользователи.СоздатьЭлемент();
                                    НовыйПользователь.Наименование=ТекущийПользоваетель.ПолноеИмя;
                                    НовыйПользователь.ПользовательИБ=ГУИД;
                                    НовыйПользователь.Записать();
                     КонецЕсли;     
                     
                     Возврат Пользователь;
    КонецФункции
    Функция ПолучитьРазрешеннуюНаНоменклатуру() Экспорт
                   
                    Пользователь=ПараметрыСеанса.Пользователь;
                   
                    Запрос = Новый Запрос;
                    Запрос.Текст =
                                   “ВЫБРАТЬ
                                   |             Номенклатура.Ссылка
                                   |ИЗ
                                   |             Справочник.Номенклатура КАК Номенклатура
                                   |ГДЕ
                                   |             Номенклатура.Ссылка В ИЕРАРХИИ
                                   |                                             (ВЫБРАТЬ
                                   |                                                            ДоступКНоменклатуре.РазрНоменклатура
                                   |                                             ИЗ
                                   |                                                            РегистрСведений.ДоступКНоменклатуре КАК ДоступКНоменклатуре
                                   |                                             ГДЕ
                                   |                                                            ДоступКНоменклатуре.Пользователь = &Пользователь)
                                   |             И Номенклатура.ЭтоГруппа = Ложь”;
     
                    Запрос.УстановитьПараметр(“Пользователь”, Пользователь);
     
                    Результат = Запрос.Выполнить();
                   
                    ТЗ=Новый ТаблицаЗначений;
                    Массив=Новый массив;
                   
                    ТЗ=Результат.Выгрузить();
                    Массив=ТЗ.ВыгрузитьКолонку(“Ссылка”);
                   
                    Возврат Массив;
     
    КонецФункции // ПолучитьРазрешениеНаНоменклатуру()
    Функция ПолучитьЗапрещеннуюНаНоменклатуру() Экспорт
                   
                    Пользователь=ПараметрыСеанса.Пользователь;
                   
                    Запрос = Новый Запрос;
                    Запрос.Текст =
                                   “ВЫБРАТЬ
                                   |             Номенклатура.Ссылка
                                   |ИЗ
                                   |             Справочник.Номенклатура КАК Номенклатура
                                   |ГДЕ
                                   |             (НЕ Номенклатура.Ссылка В ИЕРАРХИИ
                                   |                                                            (ВЫБРАТЬ
                                   |                                                                            ДоступКНоменклатуре.РазрНоменклатура
                                   |                                                            ИЗ
                                   |                                                                            РегистрСведений.ДоступКНоменклатуре КАК ДоступКНоменклатуре
                                   |                                                            ГДЕ
                                   |                                                                            ДоступКНоменклатуре.Пользователь = &Пользователь))
                                   |             И Номенклатура.ЭтоГруппа = ЛОЖЬ”;
     
                    Запрос.УстановитьПараметр(“Пользователь”, Пользователь);
     
                    Результат = Запрос.Выполнить();
                   
                    ТЗ=Новый ТаблицаЗначений;
                    Массив=Новый массив;
                   
                    ТЗ=Результат.Выгрузить();
                    Массив=ТЗ.ВыгрузитьКолонку(“Ссылка”);
                   
                    Возврат Массив;
     
    КонецФункции // ПолучитьЗапрещеннуюНаНоменклатуру()
     
    </code>
     
    Модуль сеанса
     
    <code>
     
    Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
                    ПараметрыСеанса.Пользователь=ПроверкаПользователя.СинхронизацияПользователей();
                    ПараметрыСеанса.ИспользоватьОграниченияДоступаКДанным=Константы.ИспользоватьОграниченияДоступаКДанным.Получить();
                    ПараметрыСеанса.РазрешеннаяНоменклатура=Новый ФиксированныйМассив(ПроверкаПользователя.ПолучитьРазрешеннуюНаНоменклатуру());
                    Если ПараметрыСеанса.РазрешеннаяНоменклатура.Количество()=0 Тогда
                                   ПараметрыСеанса.ЕстьОтграничениеПоНоменклатуре=Ложь;
                     Иначе
                                   ПараметрыСеанса.ЕстьОтграничениеПоНоменклатуре=Истина;
                                   ПараметрыСеанса.ЗапрещеннаяНоменклатура=Новый ФиксированныйМассив(ПроверкаПользователя.ПолучитьЗапрещеннуюНаНоменклатуру());
                    КонецЕсли;
                                  
    КонецПроцедуры
    </code>
     
    Создана роль МенеджерЗакупокПродаж
    Созданы  пользователи Иванов  и Петров. Им присвоены доступные роли  МенеджерЗакупокПродаж..
    В  регистр сведений  добавлены записи : Пользователь – Иванов,РазрНоменклатура – Инстурмент.
    Пользователь –  Петров ,РазрНоменклатура – Мебель.
    У  роли МенеджерЗакупокПродаж  для  спр.Номенклатура  на право Чтение наложено ограничение  доступа.
     
    <code>
    #Если &ЕстьОтграничениеПоНоменклатуре #Тогда
    Номенклатура ГДЕ (#ШаблонПоНоменклатуреРазр(“Ссылка”)
                                                   ИЛИ Номенклатура.ЭтоГруппа)
    #КонецЕсли
     
    </code>
     
    Для роли  МенеджерЗакупокПродаж  созданы шаблоны ограничений.
     
     
    Для контроля разрешения доступа к номенклатуре создан  шаблон ШаблонПоНоменклатуреРазр . текст шаблона  #ТекущаяТаблица.#Параметр(1) В (&РазрешеннаяНоменклатура)
     
    Для контролязапрета доступа к номенклатуре создан  шаблон ШаблонПоНоменклатуреЗапр. текст шаблона  #ТекущаяТаблица.#Параметр(1) В (&ЗапрещеннаяНоменклатура)
     
    Для документа  Поступление для права Чтение  создано ограничение доступа
     
    <code>
     
    #Если &ЕстьОтграничениеПоНоменклатуре #Тогда
    ПоступлениеТоваровИУслугТовары ГДЕ ПоступлениеТоваровИУслугТовары.Ссылка В
                                                   (ВЫБРАТЬ
                                                                   ПоступлениеТоваровИУслугТовары.Ссылка
                                                   ИЗ
                                                                   Документ.ПоступлениеТоваровИУслуг.Товары КАК ПоступлениеТоваровИУслугТовары
                                                   ГДЕ
                                                                   #ШаблонПоНоменклатуреРазр(“Номенклатура”)   )
                    И (НЕ ПоступлениеТоваровИУслугТовары.Ссылка В
                                                                   (ВЫБРАТЬ
                                                                                  ПоступлениеТоваровИУслугТовары.Ссылка
                                                                   ИЗ
                                                                                  Документ.ПоступлениеТоваровИУслуг.Товары КАК ПоступлениеТоваровИУслугТовары
                                                                   ГДЕ
                                                                                  #ШаблонПоНоменклатуреЗапр(“Номенклатура”)       ))
    #КонецЕсли
     
    </code>

  2. 1) Создал роль “Аудитор”, поставил на все объекты право “Просмотр”.
    2) Создал роль “Менеджер”, установил права такие же как полные, но на документ “Поступление  товаров и услуг” на чтение наложил ограничение:
    ТекущаяТаблица
    ИЗ
    #ТекущаяТаблица КАК ТекущаяТаблица
    ГДЕ
    НЕ ТекущаяТаблица.Ссылка В
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗапросОграниченный.Ссылка
    ИЗ
    (ВЫБРАТЬ
    ПоступлениеТоваровИУслугТовары.Ссылка КАК Ссылка,
    ПоступлениеТоваровИУслугТовары.Номенклатура КАК Номенклатура,
    ЕСТЬNULL(ОграниченияВидимостиНоменклатуры.ГруппаНоменклатуры, НЕОПРЕДЕЛЕНО) КАК ГруппаНоменклатуры
    ИЗ
    Документ.ПоступлениеТоваровИУслуг.Товары КАК ПоступлениеТоваровИУслугТовары ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    ОграниченияВидимостиНоменклатуры.ГруппаНоменклатуры КАК ГруппаНоменклатуры
    ИЗ
    РегистрСведений.ОграниченияВидимостиНоменклатуры КАК ОграниченияВидимостиНоменклатуры
    ГДЕ
    ОграниченияВидимостиНоменклатуры.Пользователь = &Пользователь
    ) КАК ОграниченияВидимостиНоменклатуры
    ПО
    ПоступлениеТоваровИУслугТовары.Номенклатура.Родитель = ОграниченияВидимостиНоменклатуры.ГруппаНоменклатуры
    ) КАК ЗапросОграниченный
    ГДЕ
    ЗапросОграниченный.ГруппаНоменклатуры = НЕОПРЕДЕЛЕНО)
     Для реализации отмены ограничения для руководителя можно сделать одно из:
    1) создать новую роль без ограничений
    2) создать булевский параметр сеанса, а в ограничении прописать проверку этого параметра. Если параметр истина, то не применять ограничение.