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

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

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

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

Решение:

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

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

1. Изменения в настройках проекта

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

  • на проект целиком;

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

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

Если есть право на назначение прав на весь проект, то в настройках проекта остается возможность добавления прав, причем только на весь проект. Изменение и удаление прав при этом доступно и для веток мероприятий проекта. Если такого права нет, кнопка «Добавить» должна быть недоступной, а таблица должна отображаться только для чтения.

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

2. Изменения в диалоговом окне редактирования проекта

Окно редактирования проекта необходимо разбить на 2 шага:

  1. весь существующий набор полей данного диалога необходимо объединить в первый шаг, добавив справа от кнопки «Сохранить» новую серую кнопку «Еще» (по аналогии с диалогом создания работы);

  2. по нажатию на кнопку «Еще» необходимо открывать второй шаг с серой кнопкой «Назад» слева от кнопки «Сохранить».

Второй шаг должен быть аналогичен вкладке «Права» настроек проекта. Таким образом, таблица во втором шаге должна содержать список прав:

  • на проект целиком;

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

Если есть право на назначение прав на весь проект, то в окне редактирования проекта имеется возможность добавления прав только на весь проект. Изменение и удаление прав при этом доступно и для веток мероприятий проекта. Если такого права нет, кнопка «Добавить» должна быть недоступной, а таблица должна отображаться только для чтения.

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

Рисунок 61. Редактирование проекта, шаг 1

Редактирование проекта, шаг 1

Рисунок 62. Редактирование проекта, шаг 2

Редактирование проекта, шаг 2

3. Изменения в диалоговом окне редактирования мероприятия

Окно редактирования мероприятия проекта необходимо разбить, по аналогии с окном редактирования проекта, на 2 шага:

  1. весь существующий набор полей данного диалога необходимо объединить в первый шаг, добавив справа от кнопки «Сохранить» новую серую кнопку «Еще» (по аналогии с диалогом создания работы);

  2. по нажатию на кнопку «Еще» необходимо открывать второй шаг с серой кнопкой «Назад» слева от кнопки «Сохранить».

Второй шаг также должен содержать кнопки «Добавить», «Вернуть по умолчанию» и таблицу со списком прав:

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

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

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

Если есть право на назначение прав на данную ветку мероприятий, то в окне редактирования мероприятия имеется возможность добавления, изменения и удаления прав только на данную ветку проекта. Если такого права нет, кнопка «Добавить» должна быть недоступной, а таблица должна отображаться только для чтения.

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

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

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

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

Доступность кнопки «Вернуть по умолчанию» определяется доступностью кнопки «Добавить», по её нажатию необходимо выдавать браузерное предупреждающее сообщение:

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

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

Рисунок 63. Редактирование мероприятия, шаг 1

Редактирование мероприятия, шаг 1

Рисунок 64. Редактирование мероприятия, шаг 2

Редактирование мероприятия, шаг 2

Рисунок 65. Права в настройках проекта

Права в настройках проекта