Задача [0598] : Централизованные фильтры в реестрах и права доступа к ним

Формулировка проблемы: в текущий момент чтобы распределить записи реестра по департаментам, приходится создавать несколько идентичных реестров и задавать права для разных департаментов. Аналогичные проблемы происходят при необходимости распределения заявок по типу.

Связанные задачи:
R1

Используется:

Решение: необходимо реализовать возможность создания централизованных фильтров в реестрах с указанием прав доступа к ним.

Данная задача состоит из следующих подзадач:

  1. Новые условия фильтров в реестрах на основе компонентов формы "Объекты Synergy" и "Ссылка на реестр"

  2. Централизованные фильтры в реестрах

  3. Доработка компонента формы "Ссылка на реестр"

  4. API получения фильтров реестра

Новые условия фильтров в реестрах на основе компонентов формы "Объекты Synergy" и "Ссылка на реестр"

Решение: необходимо добавить в условия фильтров реестров компоненты, которые входят в "Поля формы реестра", и относятся к следующим типам:

  • Объекты Synergy (для всех типов данных: подразделение, должность, пользователь);

  • Ссылка на реестр.

Подпись данных компонентов формы реестра берётся из названия соответствующего «Поля формы реестра», если оно заполнено, в противном случае подписью будет идентификатор компонента в форме.

Возможные условия фильтрации

Объекты Synergy

Используются только способы сравнения: «содержит», «не содержит».

Ввод эталонного значения осуществляется при помощи компонента "Объекты Synergy" (с типом данных: подразделение, должность, пользователь) с мультивыбором. Тип данных должен соответствовать типу данных компонента "Объект Synergy", указанного в условии фильтра.

При указании нескольких эталонных значений в одном компоненте, проверка условия осуществляется по логическому "ИЛИ". При указании в фильтре нескольких отдельных условий относительно одного компонента "Объекты Synergy", проверка условия осуществляется по логическому "И".

Ссылка на реестр

Используются только способы сравнения: «содержит», «не содержит».

Ввод эталонного значения осуществляется при помощи компонента "Ссылка на реестр" с одиночным выбором. Данный компонент должен ссылаться на тот же реестр, что и компонент из условия фильтра.

При указании в фильтре нескольких отдельных условий относительно одного компонента "Ссылка на реестр", проверка условия осуществляется по логическому "И".

Централизованные фильтры в реестрах

Решение: необходимо реализовать возможность централизованного управления фильтрами реестров с возможностью указания прав доступа к каждому из них.

Связанные задачи:

Используются:

  • Конфигуратор - "Процессы" - "Реестры"

  • Клиентское приложение - Хранилище - Реестры

Интерфейс

В редактор реестра необходимо добавиь функцию настройки фильтров реестра (кнопка "Управление фильтрами"):

Рисунок 50. Кнопка "Управление фильтрами" в редакторе

Кнопка "Управление фильтрами" в редакторе

Примечание:

Кнопка "Управление фильтрами" отображается только для сохраненных фильтров.

По нажатию на эту кнопку должно открываться окно "Управление фильтрами реестра":

Рисунок 51. Окно "Управление фильтрами"

Окно "Управление фильтрами"

В левой части окна располагается дерево централизованных фильтров, где корневым элементом является текущий реестр. В правой части расположены:

  • кнопки:

    • сохранить изменения;

    • добавить новый дочерний элемент;

    • удалить текущий элемент;

  • поля ввода сведений о фильтре:

    • "Название" - мультиязычное поле ввода (обязательное поле);

    • выбор пиктограммы фильтра (используется тот же набор пиктограмм, что и для фильтров в клиентсткой части);

    • "Код" - однострочное поле ввода (обязательное поле). К полю долны применяться существующие правила валидации.

    • блок указания условий фильтра, функциональность которого аналогична редактору фильтров реестров в клиентской части);

    • сплит;

    • таблица "Права на фильтр": аналогична таблице "Права" в редакторе реестра, но без указания права "Создание".

При выборе корневого элемента в правой части окна доступна только кнопка добавления нового элемента "+", кнопки "Сохранить" и "Удалить" заблокированы, никакие поля не отображаются.

Примечание:

Кнопки "Сохранить", "Добавить" и "Удалить" должны быть доступны только методологу (разработчику Synergy), имеющему право "Изменение" на текущий реестр.

Правила определения прав пользователя на запись реестра

  1. Для каждой записи реестра итоговый набор прав пользователя определяется как объединение прав каждого фильтра (в том числе прав самого реестра), если одновременно:

    1. запись удовлетворяет условиям фильтра;

    2. пользователь входит в группу, которой установлены права в фильтре.

  2. Пользовательские фильтры должны работать только с теми записями, которые доступны пользователю в корне.

  3. Вне зависимости от установленных прав на реестр и фильтры пользователю доступно право "Редактирование" записей, созданных им лично.

Примечание:

Условия дочернего фильтра наследуются от родительского. Наследования прав не происходит.

Отображение фильтров и доступных записей в клиентской части

В клиентской части для реестра отображаются как централизованные, так и пользовательские фильтры, причем централизованные фильтры располагаются выше пользовательских.

Если у пользователя нет прав на фильтр, то этот фильтр ему не отображается. При этом дерево централизованных фильтров соответствующим образом адаптируется: если пользователю доступны фильтры уровня N+1 и N-1, но недоступен фильтр уровня N, то в навигаторе фильтр N+1 должен быть отображен как дочерний фильтра N-1 (считается, что реестр - фильтр уровня 0, а фильтр уровня N имеет N родительских фильтров, в том числе и сам реестр).

Исходное дерево централизованных фильтров:

Реестр

...

фильтр N-1

фильтр N

фильтр N+1

...

Дерево фильтров, отображаемое для пользователя, которому доступны фильтры уровня N+1 и N-1, но недоступен фильтр уровня N:

Реестр

...

фильтр N-1

фильтр N+1

...

По умолчанию фильтры всех реестров развернуты.

Централизованные фильтры в клиентском приложении не имеют контекстного меню: их нельзя редактировать, создавать в них вложенные пользовательские фильтры.

Если у пользователя есть права хотя бы на один фильтр реестра, то ему отображается и сам реестр. При этом в реестре отображаются только записи, удовлетворяющие условиям фильтров, доступных пользователю, а также те, которые он создал.

Если запись, созданная пользователем, не удовлетворяет ни одному набору условий доступных ему фильтров, то эта запись отображается только в корне (т.е. при выборе самого реестра).

Дополнительные права, которые дают фильтры, не влияют на следующие точки доступа к реестрам и их записям:

  • Конфигуратор - Редактор форм - компонент "Ссылка на реестр";

  • Клиентское приложение - "Цели и показатели" - "Реестры";

  • Клиентское приложение - "Проекты" - "Паспорт проекта".

Действия при обновлении системы

При обновлении системы в редакторе реестров должна появиться новая функция "Управление фильтрами реестров". Никакие централизованные фильтры при обновлении создаваться не должны.

Вариант использования 1. Ограничение доступа к подмножеству записей реестра

Исходные данные:

  1. Форма реестра содержит компоненты:

    • cmp1: выпадающий список со значениями "Астана", "Алматы", "Другие"

    • cmp2: однострочное поле

  2. Пользователи user1, user2, user3.

  3. Группы пользователей:

    • группа1: user1

    • группа2: user2

    • группа3: user3

  4. Структура реестров фильтра:

    • реестр

      • Астана

      • Алматы

  5. Права на реестр и фильтры, условия фильтров:

    • права на реестр:

      Группа Просмотр списка Просмотр данных Создание Редактирование Изменение Удаление

      группа1

      +

      +

      +

      группа2

      +

      группа3

      +

    • фильтр "Астана"

      Условие: cmp1 = "Астана"

      Группа Просмотр списка Просмотр данных Редактирование Изменение Удаление

      группа1

      +

      группа2

      +

      +

      +

      +

      +

    • фильтр "Алматы"

      Условие: cmp1 = "Алматы"

      Группа Просмотр списка Просмотр данных Редактирование Изменение Удаление

      группа1

      +

      группа3

      +

      +

      +

      +

      +

    • фильтр "Другие"

      Условие: cmp1 = "Другие"

      Группа Просмотр списка Просмотр данных Редактирование Изменение Удаление

      группа1

      +

      +

      +

  6. Исходное содержимое реестра (без учета права "Создание", которое регулируется непосредственно для реестра):

Однострочное поле Выпадающий список Отображается в фильтрах Итоговые права user1 Итоговые права user2 Итоговые права user3

Контакт 1

Алматы

Алматы

Просмотр списка, просмотр данных

Все

нет

Контакт 2

Другие

только в корне

Все

нет

нет

Контакт 3

Астана

Астана

Просмотр списка, просмотр данных

нет

Все

Ход исполнения:

  1. Авторизоваться под пользователем user1, перейти к модулю "Хранилище" - "Реестры".

Структура реестров в навигаторе:

  • реестр

  • Астана

  • Алматы

  • Другие

Все дерево фильтров развернуто.

  1. В навигаторе выделить корень реестра. Отображаются записи:

Однострочное поле Выпадающий список

Контакт 1

Алматы

Контакт 2

Другие

Контакт 3

Астана

Доступно создание новой записи.

  1. Вызвать контекстное меню записи:

Контакт 3

Астана

Пункт "Удалить" недоступен.

  1. Вызвать контекстное меню записи:

Контакт 2

Другие

Доступно удаление записи.

  1. В навигаторе выделить фильтр "Алматы". Отображается запись:

Контакт 1

Алматы

  1. Открыть запись:

Контакт 1

Алматы

Кнопка перехода в режим редактирования не отображается.

  1. Авторизоваться под пользователем user2, перейти к модулю "Хранилище" - "Реестры".

Структура реестров в навигаторе:

  • реестр

  • Астана

Все дерево фильтров развернуто.

  1. В навигаторе выделить корень реестра. Отображается запись:

Однострочное поле Выпадающий список

Контакт 3

Астана

Доступно создание новой записи.

  1. Открыть запись:

Контакт 3

Астана

Доступно редактирование записи.

  1. Закрыть проигрыватель форм, выделить в навигаторе фильтр "Астана". Отображается запись:

Однострочное поле Выпадающий список

Контакт 3

Астана

  1. Создать новую запись реестра:

Однострочное поле Выпадающий список

Контакт 4

Другие

Новая запись создана.

  1. Закрыть проигрыватель форм, выделить в навигаторе фильтр "Астана". Отображается запись:

Однострочное поле Выпадающий список

Контакт 3

Астана

  1. В навигаторе выделить корень реестра. Отображаются записи:

Однострочное поле Выпадающий список

Контакт 3

Астана

Контакт 4

Другие

Вариант использования 2. Наследование условий фильтров, адаптация дерева фильтров при недоступности одного из элементов дерева

Исходные данные:

  1. Форма реестра содержит компоненты:

    • cmp1: однострочное поле

    • cmp2: дата/время

    • cmp3: выпадающий список со значениями "1", "2", "3".

  2. Пользователи user1, user2, user3.

  3. Группы пользователей:

    • группа1: user1

    • группа2: user1, user2

    • группа3: user1, user3

    • группа4: user3

    • группа5: группа2, группа4

  4. Структура реестров фильтра:

    • реестр

      • фильтр 1.1

        • фильтр 2.1

          • фильтр 3

        • фильтр 2.2

      • фильтр 1.2

  5. Права на реестр и фильтры, условия фильтров:

    • права на реестр:

      Группа Просмотр списка Просмотр данных Создание Редактирование Изменение Удаление

      группа1

      +

      +

      +

      группа2

      +

      +

    • фильтр 1.1:

      Условие: cmp1 > 0; cmp2 >= 2016-12-01

      Группа Просмотр списка Просмотр данных Редактирование Изменение Удаление

      группа1

      +

      +

      +

      +

      +

    • фильтр 2.1:

      Условие: cmp1 > 1; cmp2 >= 2017-01-01

      Группа Просмотр списка Просмотр данных Редактирование Изменение Удаление

      группа2

      +

      +

      +

      +

    • фильтр 3:

      Условие: cmp3 = "1"

      Группа Просмотр списка Просмотр данных Редактирование Изменение Удаление

      группа3

      +

      +

      +

      +

      +

    • фильтр 2.2:

      Условие: cmp1 > 5; cmp1 <=10

      Группа Просмотр списка Просмотр данных Редактирование Изменение Удаление

      группа1

      +

      группа4

      +

      +

      +

      +

      +

    • фильтр 1.2:

      Условие: cmp1 < 0

      Группа Просмотр списка Просмотр данных Редактирование Изменение Удаление

      группа5

      +

      +

      +

  6. Исходное содержимое реестра (без учета права "Создание", которое регулируется непосредственно для реестра):

Однострочное поле Дата Выпадающий список Отображается в фильтрах Итоговые права user1 Итоговые права user2 Итоговые права user3

-1

2017-01-05

1

фильтр 1.2

Просмотр списка, просмотр данных, удаление

Просмотр списка, просмотр данных, удаление

Просмотр списка, просмотр данных, удаление

11

2016-11-30

2

только в корне

Просмотр списка, просмотр данных, удаление

Просмотр списка, просмотр данных,

Нет

7

2016-11-29

1

только в корне

Просмотр списка, просмотр данных, удаление

Просмотр списка, просмотр данных,

Нет

6

2017-01-01

3

фильтр 1.1, фильтр 2.1, фильтр 2.2

Все

Просмотр списка, просмотр данных, редактирование, изменение

Все

0,5

2017-01-01

1

фильтр 1.1

Все

Просмотр списка, просмотр данных

Нет

2

2017-02-02

1

фильтр 1.1, фильтр 2.1, фильтр 3

Все

Просмотр списка, просмотр данных, редактирование, изменение

Все

-7

2017-01-10

2

фильтр 1.2

Просмотр списка, просмотр данных, удаление

Просмотр списка, просмотр данных, удаление

Просмотр списка, просмотр данных, удаление

0

2016-12-01

3

только в корне

Просмотр списка, просмотр данных, удаление

Просмотр списка, просмотр данных,

Нет

Ход исполнения:

  1. Авторизоваться под пользователем user1, перейти к модулю "Хранилище" - "Реестры".

Структура реестров в навигаторе:

  • Реестр

  • фильтр 1.1

  • фильтр 2.1

  • фильтр 3

  • фильтр 2.2

  • фильтр 1.2

Все дерево фильтров развернуто.

  1. Создать новую запись в реестре:

однострочное поле: 0

дата/время: 2017-03-03

выпадающий список: "2"

Сохранить данные.

  1. В навигаторе выделить корень реестра. Отображаются записи:

Однострочное поле Дата Выпадающий список

-1

2017-01-05

1

11

2016-11-30

2

7

2016-11-29

1

6

2017-01-01

3

0,5

2017-01-01

1

2

2017-02-02

1

-7

2017-01-10

2

0

2016-12-01

3

0

2017-03-03

2

  1. Открыть запись:

11

2016-11-30

2

Кнопка перехода в режим редактирования не отображается.

  1. Закрыть проигрыватель форм, в навигаторе выделить фильтр 1.1. Отображаются записи:

Однострочное поле Дата Выпадающий список

6

2017-01-01

3

0,5

2017-01-01

1

2

2017-02-02

1

  1. Вызвать контекстное меню записи:

0,5

2017-01-01

1

Доступен пункт "Удалить".

  1. Открыть запись:

2

2017-02-02

1

Доступна кнопка перехода в режим редактирования.

  1. Закрыть проигрыватель форм, в навигаторе выделить фильтр 3. Отображаются записи:

Однострочное поле Дата Выпадающий список

6

2017-01-01

3

0,5

2017-01-01

1

2

2017-02-02

1

  1. Авторизоваться под пользователем user3, перейти к модулю "Хранилище" - "Реестры".

Структура реестров в навигаторе:

  • Реестр

  • фильтр 2.1

  • фильтр 3

  • фильтр 2.2

  • фильтр 1.2

Фильтр 1.1 не отображается. Создание новой записи в реестре недоступно.

  1. В навигаторе выделить корень реестра. Отображаются записи:

Однострочное поле Дата Выпадающий список

-1

2017-01-05

1

6

2017-01-01

3

2

2017-02-02

1

-7

2017-01-10

2

  1. В навигаторе выделить фильтр 2.1. Отображаются записи:

Однострочное поле Дата Выпадающий список

6

2017-01-01

3

2

2017-02-02

1

  1. Вызвать контекстное меню записи:

6

2017-01-01

3

Доступен пункт "Удалить".

  1. Открыть запись:

2

2017-02-02

1

Доступна кнопка перехода в режим редактирования.

Доработка компонента формы "Ссылка на реестр"

Решение: необходимо изменить компонент формы "Ссылка на реестр", добавив отображение фильтров реестра.

Используются:

  • Клиентское приложение - проигрыватель форм

Проигрыватель форм

Существующее окно диалога выбора записи реестра необходимо расширить, добавив в левой части дерево доступных пользователю фильтров:

Рисунок 52. Диалог выбора записи реестра, проигрыватель форм

Диалог выбора записи реестра, проигрыватель форм

  • Функциональность дерева фильтров, отступы между уровнями и используемые пиктограммы аналогичны дереву в диалоге выбора подразделения (в проигрывателе форм).

  • Ширина блока дерева фильтров по умолчанию - 200px. Ширину блока можно изменять: минимальный размер - 92px, максимальный - 592px (2/3 от общего размера диалога).

  • Длина поля поиска по записям реестра должна увеличиться на 205px.

  • Кнопка "Выбрать" перемещается таким образом, чтобы располагаться в центре окна.

Размер и расположение остальных компонентов окна не изменяется.

При выборе реестра пользователю отображаются только доступные ему фильтры (как централизованные, так и пользовательские). Порядок отображения фильтров в диалоге выбора записи такой же, как и в навигаторе реестров в клиентской части.

По умолчанию отображаются записи, доступные пользователю в корне реестра.

Корнем дерева фильтров считается реестр.

Поиск записей производится только по тем записям, которые доступны пользователю.

Примечание:

В случае использования модифицированного компонента "Ссылка на реестр" блок фильтров реестра в нем может не отображаться по умолчанию, и это не является ошибкой Synergy. В этом случае требуется дополнительно обновлять внешний вид для каждого случая.

API получения фильтров реестра, доработка существующих методов работы с реестрами

Решение: необходимо реализовать метод для получения фильтров реестров, а также доработать существующие методы работы с реестрами для обеспечения поддержки фильтров.

  1. Новый API получения фильтров реестра getRegistryFilters.

URL метода: rest/api/registry/filters

Тип запроса: GET

Параметры:

  • registryID - ID реестра (не обязательное).

  • registryCode - код реестра (не обязательно, если указан registryID).

  • type - требуемые типы фильтров (не обязательное). Может принимать значения:

  • all - все фильтры (значение по умолчанию);

  • user - пользовательские;

  • service - централизованные;

Если в параметре передано другое значение, оно обрабатывается как all.

  • locale - код локали (не обязательное). Если не указан, то используется локаль по умолчанию.

  • getIcon - возвращать иконку фильтра (логический, не обязательный). По умолчанию принимает значение true.

Возвращает дерево доступных авторизованному пользователю фильтров указанного реестра в формате JSON.

Альтернативный поток событий 1. Не передан ни один из параметров registryID, registryCode.

Сервер возвращает ошибку "Не указан реестр", действие не выполняется.

Альтернативный поток событий 2. Передан некорректный (несуществующий) параметр registryID или registryCode.

Сервер возвращает ошибку "Передан некорректный параметр registryID или registryCode", действие не выполняется.

Альтернативный поток событий 3. Авторизованный пользователь не имеет прав на указанный реестр (в том числе с учетом прав фильтров)

Сервер возвращает ошибку "Нет прав на указанный реестр", действие не выполняется.

  1. Изменение существующих API.

Модификация метода rest/api/registry/data

  1. Новые параметры:

  • filterID - ID фильтра (не обязательное). Если параметр не указан, то выполняется поиск по всему реестру.

  • filterCode - код фильтра (не обязательное, если указан filterID).

  1. Исключить параметр user. Если этот параметр будет передан, то выполняется альтернативный поток событий 4.

  1. Необходимо возвращать только те записи реестра, которые доступны авторизованному и удовлетворяют условиям указанных фильтров.

Модификация методов rest/api/registry/data_ext и rest/api/registry/data_ext_post

  1. Новые параметры:

  • filterID - ID фильтра (не обязательное). Если параметр не указан, то выполняется поиск по всему реестру.

  • filterCode - код фильтра (не обязательное, если указан filterID).

  1. В группах условий, параметр condition, условия с кодами CONTAINS, NOT_CONTAINS, TEXT_EQUALS и TEXT_NOT_EQUALS должны учитывать возможность использования для сравнения ссылок на реестр, объектов Synergy.

Если для поиска используется параметр searchString, поиск указанного текста также должен выполняться по ссылкам на реестр и по объектам Synergy.

  1. Необходимо возвращать только те записи реестра, которые доступны авторизованному пользователю (с учетом прав реестра и указанного фильтра) и удовлетворяют условиям фильтра.

Модификация метода rest/api/registry/list

Метод должен дополнительно возвращать все реестры, в которых есть централизованные фильтры, дающие пользователю право доступа к реестру.

Модификация метода rest/api/registry/files/search

Необходимо выполнять поиск только по тем реестрам, на которые у авторизованного пользователя есть право "Просмотр данных".

Альтернативный поток событий 4. В параметрах метода rest/api/registry/data передан параметр user

Сервер возвращает ошибку "Параметр user не может быть использован", действие не выполняется.

Альтернативный поток событий 5. В параметре registries метода rest/api/registry/files/search передан ID реестра, на который у авторизованного пользователя нет права "Просмотр данных"

Сервер возвращает ошибку "Нет прав на указанные реестры: %перечень_ID_реестров_из_параметров_без_права_просмотра_данных%", действие не выполняется.

Альтернативный поток событий 6. Передан некорректный (несуществующий) параметр filterID или filterCode в методе rest/api/registry/data, rest/api/registry/data_ext или rest/api/registry/data_ext_post

Сервер возвращает ошибку "Передан некорректный параметр filterID или filterCode", действие не выполняется.