Documentation
¶
Overview ¶
Package identityposture — ПОСАДКА ЛИЧНОСТИ: кто проверяет, что перед платформой именно этот человек (задача #1125, подфаза Ф4д эпика #896).
───────────────────────────────────────────────────────────────────────────── ЗАЧЕМ ПОЛЕ ВООБЩЕ ЕСТЬ
Платформа переезжает со внешнего поставщика удостоверений на свою чеканку. Пока переезд идёт, в дереве живут ОБА тракта, и требования у них противоположные: одному нужны три адреса поставщика, второму — ни одного. Стражи старта, написанные без этого различия, требуют адресов ВСЕГДА, и отдельный клон в боевой посадке не поднимается, сколько бы кода ни переехало: проверка настройки возвращает три отказа сразу.
Поле разводит эти требования явно. Оно не «переключатель возможностей» — оно ответ на вопрос, на который у стенда обязан быть ответ, и без ответа стенд не поднимается.
───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ УМОЛЧАНИЯ В КОДЕ НЕТ — обе альтернативы разобраны, а не отброшены
- умолчание `external` заставило бы каждый профиль, поля не объявивший, требовать адресов, которых у него нет. Поле, которое ничего не разводит, — это поле без читателя;
- умолчание `own` МОЛЧА сняло бы провайдерские требования у профиля, который просто забыли обновить. Это и есть состояние «продукт поднялся, а посадку никто не выбирал».
Умолчание живёт В ПРОФИЛЕ: базовый профиль зонтичного чарта объявляет значение явно, поэтому ни один существующий стенд не ломается, а отдельный клон обязан выбрать сам.
───────────────────────────────────────────────────────────────────────────── «НЕ ЗАДАНО» НЕ ПЕРЕСЕКАЕТСЯ С ОБЛАСТЬЮ ЗНАЧЕНИЙ
Нулевое значение типа — Unset — означает РОВНО «профиль поля не объявил» и законным значением поля не является. Пустая строка значением тоже не является: она не «безопасное умолчание», а отсутствие ответа.
───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ В ОБЩЕМ ФУНДАМЕНТЕ, А НЕ В НАСТРОЙКЕ СЛУЖБЫ ПРАВ
Посадку читают ДВА процесса: служба прав и край. Ни один из них не вправе импортировать внутренности другого, поэтому словарь, оставленный в настройке одного, был бы переписан во втором — и разошёлся бы с первым молча, на первом же новом значении. Горизонтальное живёт в общем фундаменте.
───────────────────────────────────────────────────────────────────────────── СЛОВАРЬ ТОЧНЫЙ, БЕЗ ПРИВЕДЕНИЯ РЕГИСТРА И БЕЗ ОБРЕЗКИ
Разбор сверяет значение ДОСЛОВНО. Причина не в педантизме: соседняя раскладка (`Own`), лишний символ (`own `) и омоглиф кириллицы (`оwn` — буква `о` из другого алфавита) на глаз неотличимы от законного значения, а приведение регистра и обрезка сделали бы часть из них законными молча. Величина, от которой зависит, требовать ли адресов внешнего поставщика, читается точным совпадением либо отвергается с именем поля.
Index ¶
Constants ¶
const FieldName = "identity-provider"
Setting — имя настройки. Объявлено один раз: его называют текст отказа старта, текст отказа разбора и документация профилей; три копии разошлись бы на той, которую забыли поправить. FieldName — КАНОНИЧЕСКОЕ имя поля, одинаковое у обоих процессов. Имя РУЧКИ у каждого своё (путь в настройке службы прав, переменная окружения на крае), и называет его вызывающий: отказ, назвавший чужую ручку, посылает оператора править не тот профиль.
Variables ¶
This section is empty.
Functions ¶
func Names ¶
func Names() []string
Names возвращает канонические имена законных значений в порядке словаря — для текстов отказа и для табличных проб.
func NotDeclared ¶
NotDeclared — отказ старта на профиле, поля не объявившем. Текст один на оба процесса: расхождение диагностики по процессам заставило бы оператора учить два объяснения одного предмета.
Types ¶
type Provider ¶
type Provider int
Provider — посадка личности: чем стенд проверяет человека.
const ( // Unset — профиль поля не объявил. Отказ старта. Unset Provider = iota // External — личность проверяет внешний поставщик; его // адреса обязательны. External // Own — личность проверяем мы сами; адреса поставщика не // требуются, вместо них обязательна своя чеканка и свой вход человека. // // ПЕРЕХОДНОЕ ли это состояние: переходным объявлено `external` (решение // оркестратора по §15 приёмки Ф4д) — оно уходит вместе с последним стендом, // который его выбирает. `own` — то, к чему платформа приходит. Own )
Значения. Нулевое — «не задано», и оно НЕ входит в словарь законных.
func Parse ¶
Parse — поточечно обратная String() для законных значений.
Отказ называет поле и ОБА законных значения; отката к «безопасному» значению не происходит — возвращается Unset, то есть «ответа нет». Вызывающий, проглотивший ошибку, получит незаданную посадку и упрётся в тот же отказ старта, а не в молча выбранную полосу.
func Values ¶
func Values() []Provider
Values возвращает законные значения поля — ВЫВЕДЕННЫЕ из словаря, а не выписанные вызывающим.
func (Provider) MarshalJSON ¶
MarshalJSON / UnmarshalJSON — сериализация под ту же дисциплину, что разбор.
func (Provider) String ¶
String — каноническое имя. У «не задано» имени в словаре нет, и печатается оно так, чтобы в тексте отказа не выглядеть значением.
func (*Provider) UnmarshalJSON ¶
UnmarshalJSON разбирает значение тем же Parse — второго разборщика не заводится.