В Quevell доступ сужается до одной задачи, не трогая работу остальных. Поэтому кадровые, зарплатные и инцидентные задачи не нужно прятать в отдельный секретный проект.
Уровень безопасности
Уровень безопасности это именованный список тех, кого он пускает. Он создается в проекте и принадлежит проекту.
Задача либо находится под уровнем, либо ни под каким. Задача без уровня видна всем, кто видит проект, ровно как обычно.
Только сужение
Главное правило одно: уровень безопасности только сужает права проекта и никогда их не расширяет.
Пользователь, который не видит проект, не увидит задачу в нем ни при каком уровне, даже если он указан в уровне лично. Уровень определяет, кто из пользователей, уже имеющих доступ к задаче через проект, увидит ее. Расширить доступ сверх проекта уровень не может.
Отсюда следует то, ради чего это устроено так: ошибка в настройке уровня не может показать задачу тому, кому проект ее не показал бы. Ошибиться можно только в сторону меньшей видимости.
Кого пускает уровень
В списке уровня бывают три вида записей:
| Вид | Кого пускает |
|---|---|
| Пользователь | одного указанного пользователя |
| Группа | всех, кто состоит в группе, и никого больше |
| Роль в проекте | всех, у кого эта роль в проекте задачи |
Группы появились здесь не для удобства. Уровень, перечисляющий пользователей поименно, устаревает в тот день, когда состав меняется; уровень, в котором указана группа, остается верным, потому что меняется только состав группы.
Роль, полученная через группу, засчитывается: если у группы в проекте роль участника, а уровень пускает контрибьюторов, участники группы проходят.
Администраторы безопасности
Тот, у кого в проекте есть право управлять безопасностью задач, видит защищенные задачи этого проекта всегда, независимо от списка.
Пустой список участников уровня означает доступ только администраторам, а не никому. Если из уровня удалили последнюю запись, задача остается видимой тем, кто может исправить настройку, и не запирается навсегда.
Уровень по умолчанию
Проект может назначить один из своих уровней уровнем по умолчанию: тогда каждая новая задача этого проекта создается с этим уровнем. Это для проектов, где защищено все, а не отдельные задачи, и где полагаться на то, что пользователь не забудет поставить уровень руками, не стоит.
Где это действует
Правило видимости у продукта одно, записанное в одном месте, и его применяют все пути чтения, которые могут показать задачу: поиск по проекту, глобальный поиск, списки, карточки на досках. Отдельного пути, где правило забыли применить, нет и быть не может: иначе один метод API, оставленный для совместимости, тихо становился бы дырой.
На практике защищенная задача вообще не появляется в результатах поиска у того, кого уровень не пускает: ни целиком, ни с закрытым содержимым. Ее там просто нет.
В языке запросов поля для уровня безопасности нет: поле level означает уровень иерархии типа задачи, а не уровень безопасности.
Сколько задач под уровнем
Рядом с каждым уровнем видно, сколько задач под ним прямо сейчас. У уровня, который ничего не охраняет, так и написано: ноль задач, и это единственный способ заметить, что уровень перестал использоваться, вместо того чтобы гадать.
Что записывается
Создание уровня, изменение его списка и перевод задачи под уровень попадают в журнал изменений с автором и временем. Кто и когда изменил уровень задачи, видно в журнале.