Задача [0155, часть 2]: Разграничение прав доступа к проекту на уровне мероприятий

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

Используется: большая часть функционала модуля «Проекты»:

Связанная задача: 0155, часть 1.

Решение:

Общее решение заключается в том, что теперь будет возможна раздача прав на определенное мероприятие или ветку мероприятий, т.е. пользователь может видеть не проект целиком, а только его часть.

Все изменения в модуле «Проекты» поделены на 2 задачи. В данной задаче рассмотрены все логические изменения.

1. Отображение проекта, веток мероприятий

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

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

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

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

По нажатию в дереве на проект основная область должна содержать:

  • подпись Проект %Название_проекта%;

  • подпись Владелец %Фамилия И.О. - должность%;

  • строки, которые должны соответствовать вложенным нодам проекта в дереве.

Каждая строка должна быть разбита на 3 столбца:

%Название_ветки%

%Ответственный за мероприятие% в формате Фамилия И.О.

%Прогресс мероприятия%

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

Кроме того, выделенная ветка проекта всегда должна отображаться и в компоненте «путь» со своей иконкой и максимальными размерами 230x22 px (811.4x77.6 mm, 72 dpi). Иконка ветки проекта: .

Примечание.

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

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

По нажатию в дереве на проект основная область должна отображать проект (при этом может не всю её часть - если на определенную ветку пользователю права удалили, см. примечание), по выделению вложенной ноды в дереве - только та часть проекта, на которую были настроены права как на ветку (включая изменения в компоненте «путь»).

Примечание: если на данное групповое мероприятие права были удалены, но при этом в его дочерних мероприятиях какие-либо права есть, то при отображении его непосредственного родительского мероприятия ветка с данным групповым мероприятием должна отсутствовать. Например, пусть исходная структура проекта выглядит как в варианте 1 (в скобках указаны права для пользователя Х).

Вариант 1 Вариант 2

Корневое (чтение)

Корневое (чтение)

1 (чтение)

1 (чтение)

- 1.1 (нет прав)

- 1.2 (чтение)

-- 1.1.1 (чтение)

2 (чтение)

- 1.2 (чтение)

2 (чтение)

Для пользователя Х выделенный в навигаторе проект должен выглядеть как в варианте 2. А мероприятие со структурным номером 1.1.1, на которое у пользователя Х также есть права, можно увидеть только из выделенной в навигаторе соответствующей ветки.

Рисунок 66. Список доступных веток проекта

Список доступных веток проекта

Рисунок 67. Открытая ветка проекта

Открытая ветка проекта

2. Остальные изменения в модуле «Проекты»

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

В случае, когда в дереве выделен проект, а в основной области отображается список доступных веток проекта:

  • Над компонентом «путь» должны отображаться только кнопка обновления, т.е. должны отсутствовать кнопки «+» добавления нового мероприятия, «Диаграмма», «Детали», «Гистограмма» и «Отчеты».

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

  • Прогресс в третьем столбце каждой из строк выставлять нельзя.

  • Контекстное меню кликабельных строк должно содержать пункты «Открыть» и через сплит «Удалить». Пункт «Открыть» доступен всегда, по его нажатию в дереве должна выделиться соответствующая ветке нода, в основной области должна открыться сама ветка проекта. Доступность пункта «Удалить» определяется правом «Запись» на данную ветку.

В случае, когда отображается только часть проекта (в т.ч. только одна ветка):

  • Над компонентом «путь» должны отображаться кнопки обновления, «+» добавления нового мероприятия, «Диаграмма», «Детали» и отчеты, т.е. должна отсутствовать только кнопка «Гистограмма».

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

  • Добавление нового мероприятия осуществляется в конец выделенной ветки.

    Пример 1

    Вариант 1 Вариант 2

    Корневое

    Корневое

    1 - а

    1 - а

    3 - абв

    2 - аб

    3 - абв
    4 - абвг
    5 - абвгд

    Здесь цифра - это структурный номер мероприятия, а, аб, абв, абвг - названия мероприятий. Пусть вариант 1 - это структура проекта, которая отображается пользователю 1, а вариант 2 - проект целиком, доступный владельцу. Если пользователь добавит новое мероприятие в корень, то вставка должна произойти под номером 6, т.к. структурные номера 4 и 5 уже заняты (хоть от пользователя они и скрыты).

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

  • При этом зависимости в столбце «Зависит», которые уже ссылаются на невидимую часть проекта, прописываться должны. Новую зависимость можно выставлять только внутри отображаемой части проекта, иначе необходимо выдавать ошибку:

    Связи мероприятия изменены со следующими конфликтами:

    Не найдены мероприятия с номерами: %номер%

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

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

  • Стандартные отчеты (экспорт в Excel, в xml, версия для печати: таблица и диаграмма, сводный отчет по работам проекта) должны быть недоступны. Среди пользовательских отчетов должны отображаться только те, которые настроены для модуля «Мероприятие».

  • Контекстное меню мероприятий такое же, как если открыт весь проект целиком, за следующими уточнениями:

    • «Показать удаленные» должен показывать удаленные мероприятия, которые входят во-первых, в данную ветку проекта, во-вторых, до удаления на него были права, в-третьих, входят в указанный период.

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

      Пример 2

      По таблице из примера 1: если пользователь 1 скопирует корневое мероприятие, то в буфер должны попасть корневое мероприятие, и два его дочерних: 1 - а и 3 - абв.

    • При вырезании группового мероприятия, которое содержит хотя бы одно дочернее мероприятие, на которое у данного пользователя нет права «Запись», необходимо выдавать ошибку:

      У вас недостаточно прав, чтобы произвести данное действие со всеми мероприятиями

      и не выполнять действие.

    • При удалении группового мероприятия, которое содержит хотя бы одно дочернее мероприятие, на которое у данного пользователя нет права «Запись» (и стало быть удаления), необходимо выдавать ошибку:

      У вас недостаточно прав, чтобы произвести данное действие со всеми мероприятиями

      и не выполнять действие.

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

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

      Пример 3

      По таблице из примера 1: если пользователь 1 вставит мероприятие(-я) из буфера в корень, то вставка должна произойти под номером 6, т.к. структурные номера 4 и 5 уже заняты (хоть от пользователя они и скрыты).

  • В диалоговом окне «Ответственные за мероприятия» в разделе «Участники проекта» должны отображаться все возможные участники проекта.

  • Поиск по проекту Ctrl+F должен выдавать результаты (выделять) только среди доступных данному пользователю мероприятий.

    Пример 4

    По таблице из примера 1: для поискового запроса «а» сначала должно выделиться мероприятие «1 - а», затем «3 - абв», затем сообщение Элементов не найдено.

Общее для обоих случаев:

  • Контекстное меню проекта в дереве измениться не должно.

  • Контекстное меню ветки в дереве должно содержать только пункт «Удалить». Доступность пункта определяется правом «Запись» на данную ветку.

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

  • При переходе по ссылке на мероприятие проекта, которое недоступно данному пользователю, в дереве проект должен выделиться, в основной же области должен отображаться один из двух вышеперечисленных видов отображения проекта с индикацией ошибки:

    У Вас нет прав на чтение данного мероприятия проекта

  • Поиск в портфеле данной задачей не затрагивается (т.к. поиск по мероприятиям здесь не осуществляется).

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

    • по мероприятиям: результаты должны входить в указанный период, а завершенные и удаленные мероприятия должны отображаться только в том случае, если до завершения и удаления соответственно на них были права;

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

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

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

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

Во-первых, при обновлении системы все наборы прав на все существующие проекты должны сохраниться. Кроме того, наборы прав на все дочерние мероприятия должны быть унаследованы от набора прав корня проекта.

Во-вторых, при обновлении БД менеджеру данного портфеля во все проекты любого уровня вложенности должно установиться право на чтение. Если на корневое мероприятие право на чтение у такого пользователя уже существует, то еще раз добавлять такое право не нужно.

Также при обновлении БД всем пользователям - не менеджерам данного портфеля - с любыми правами на него в проекты первого уровня вложенности (не учитывая проекты дочерних портфелей) должно установиться право на чтение. Здесь аналогично, если на корневое мероприятие право на чтение у такого пользователя уже существует, то еще раз добавлять такое право не нужно.

4. Связь между правами на портфель и правами на проект

Важное примечание.

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