четверг, 14 июля 2011 г.

Управление правами в трекере

1 Общие положения
Управление правами осуществляется на основании ролей. В роли прописаны права на действия. Каждое право либо дано, либо нет.
Стоит сделать вектор (массив) объектов прав (то, на что устанавливаем права) и по этому образцу задавать права у ролей.
Права считаются независимыми друг от друга (т.е. при установке права не проверяется, есть или нет какие-то другие права).
Каждый пользователь может иметь несколько ролей. Права пользователя определяются объединением прав ролей, т.е. операцией .or. над векторами прав.
Каждое действие совершается, если у пользователя есть права хоть по одному основанию (особенности при движении, чтобы результат не вызвал противоречия с другими правами).

2 Инцидент (задача)
Права на инциденты устанавливаются в общих терминах, т.е. невозможно установить права на отдельный инцидент, права на него вычисляются по его свойствам (исполнитель, состояние и т.д.).
Для инцидента (за исключением права на создание) различаются права в разных есго отношениях с инцидентом:
  • я — Исполнитель
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты
    Часть действий (критически важные) сопровождаются служебными комментариями со стандартным текстом.

    2.1 Создание инцидента
    Да/нет

    2.2 Просмотр инцидента
  • я — Исполнитель: всегда да!
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты

    2.3 Передача инцидента
  • я — Исполнитель: всегда да!
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты

    2.4 Комментирование
  • я — Исполнитель: всегда да!
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты

    2.5 Редактирование текста инцидента
  • я — Исполнитель
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты
    Существенная особенность: редактирование текста инцидента не-Исполнителем возможно только в неактивном состоянии.

    2.6 Изменение приоритета инцидента
  • я — Исполнитель
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты

    2.7 Редактирование тегов инцидента
    Назначение/удаление тегов у инцидента. Считаем теги, так же как и приоритет, не критичными для сохранения истории, поэтому не разделяем операции назначения и удаления тегов.
  • я — Исполнитель
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты

    2.8 Выбор рамочной задачи
    Действие представляет собой ситуацию {номер рамочной задачи пуст} => {номер рамочной задачи непуст}.
  • я — Исполнитель
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты

    2.9 Очистка рамочной задачи
    Действие представляет собой ситуацию {номер рамочной задачи непуст} => {номер рамочной задачи пуст}.
  • я — Исполнитель
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты

    2.10 Изменение рамочной задачи
    Действие представляет собой ситуацию {номер рамочной задачи непуст} => {номер рамочной задачи непуст и не совпадает с начальным}.
  • я — Исполнитель
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты

    2.11 Прицепление файла
    Действие представляет собой добавление нового файла из ЭА.
  • я — Исполнитель
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты

    2.12 Отцепление файла
  • я — Исполнитель
  • я — Автор
  • я — Основной исполнитель
  • я — Владелец
  • все инциденты

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

    3.1 Просмотр инцидентов в состоянии
    Просмотр инцидентов, находящихся в определенном состоянии. Если у пользователя права на состояние нет, но право на инцидент есть (к примеру, как у Владельца), то действуют более широкие права, т.е. доступ к инциденту есть.
  • все состояния
  • активные
  • ждущие
  • финальные
  • <по каждому состоянию индивидуально>

    3.2 Быть исполнителем в состоянии
    Показывает то, что данный исполнитель может быть исполнителем для инцидентов в данном состоянии.
  • активные
  • <по каждому состоянию индивидуально>

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

    4.1 Переход без доп.условий
  • все переходы
  • <по каждому переходу отдельно>

    4.2 Переход в ситуации «я — Исполнитель»
    Действие представляет собой ситуацию {задача в состоянии А, исполнитель Иванов} => {задача в состоянии Б (возможно Б=А), исполнитель Иванов}, т.е. некий переход вообще может быть недоступен, но доступен для пользователя, если он является текущим Исполнителем инцидента. При таком движении исполнитель не изменяется. Если данного пользователя нет в списке возможных исполнителей конечного состояния перехода, то такой переход не должен быть доступен вне зависимости от этого права.
  • все переходы
  • <по каждому переходу отдельно>

    4.3 Переход в ситуации «я — Владелец»
    Это возможность Владельцу дать права на движения его инцидентов.
  • все переходы
  • <по каждому переходу отдельно>

    5 Прочие права
    Прочие права должны описывать доступ к следующим объектам:
  • Реестр инцидентов
  • Отчеты (когда они будут написаны)
  • Создание/изменение текста тегов
  • ...и т.д.
    Доступ к файлам управляется на уровне прав электронного архива.
    Все это будет описано в отдельном документе.
  • Комментариев нет:

    Отправить комментарий