Documentation
¶
Overview ¶
Package identityposture — ПОСАДКА ЛИЧНОСТИ: кто проверяет, что перед платформой именно этот человек (задача #1125, подфаза Ф4д эпика #896).
───────────────────────────────────────────────────────────────────────────── ЗАЧЕМ ПОЛЕ ЕСТЬ, КОГДА ЗАКОННОЕ ЗНАЧЕНИЕ ОДНО
Поле завели на время переезда со внешнего поставщика удостоверений на свою чеканку. Пока переезд шёл, в дереве жили ОБА тракта с противоположными требованиями: одному нужны три адреса поставщика, второму — ни одного. Поле разводило эти требования явно.
Посадка `external` из словаря снята (corelib#30): законное значение одно — `own`. Поле при этом остаётся обязательным. Профиль, объявивший снятую посадку строкой, получает отказ с именем настройки от Parse — тем же текстом, что любое незнакомое имя. Число мимо Parse отвергает Validate — тем же текстом, что любое число вне словаря, — но только в процессе, чья проверка старта этот метод зовёт. Перевод проверок старта обоих потребителей — службы прав и края — на Validate ведут задачи PRO-Robotech/kaname#424 и PRO-Robotech/kacho#2862; пока они открыты, потребители Validate при старте не зовут и судят только IsSet.
───────────────────────────────────────────────────────────────────────────── ИМЯ `External` ОСТАЛОСЬ, ЗНАЧЕНИЕ — ВНЕ СЛОВАРЯ
Путь модуля — без суффикса мажорной версии, и снятое экспортированное имя в минорном выпуске v1 ломало бы сборку потребителя, поднявшего пин. Поэтому `External` — устаревшая константа прежнего типа и прежнего числа с абзацем `Deprecated:`. Разбор её не производит, перечни её не называют, печатается она как величина вне словаря. Имя снимается только мажорным выпуском модуля.
«Вне словаря» не значит «недостижимо». Тип — целое, и число снятой посадки записывает в поле всякий, кто идёт мимо Parse: преобразование типа, декодер настройки, кладущий число прямо в целое поле. Такое значение IsSet называет объявленным — и это правда: профиль поле объявил. Законным его называет только словарь — IsLegal, а проверке старта служит Validate: он различает три исхода (не объявлено · объявлено вне словаря · законно) и отвергает снятую посадку наравне с любым другим числом вне словаря. Поэтому ветку потребителя, читающую External, снимают не раньше, чем перед ней встанет Validate: до того она может оказаться единственным, что за этим значением стоит.
───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ УМОЛЧАНИЯ В КОДЕ НЕТ
Умолчание `own` МОЛЧА подняло бы профиль, поля не объявивший, — в том числе написанный под снятую посадку и не обновлённый: адреса поставщика в нём остались бы без читателя, а стенд поднялся бы в посадке, которую никто не выбирал. Отказ старта заставляет выбрать явно. Второй довод прежней редакции — умолчание `external` требовало бы адресов у профиля, у которого их нет, — ушёл вместе со значением.
Умолчание живёт В ПРОФИЛЕ: профиль объявляет значение явно, а отдельный клон обязан выбрать сам.
───────────────────────────────────────────────────────────────────────────── «НЕ ЗАДАНО» НЕ ПЕРЕСЕКАЕТСЯ С ОБЛАСТЬЮ ЗНАЧЕНИЙ
Нулевое значение типа — Unset — означает РОВНО «профиль поля не объявил» и законным значением поля не является. Пустая строка значением тоже не является: она не «безопасное умолчание», а отсутствие ответа.
───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ В ОБЩЕМ ФУНДАМЕНТЕ, А НЕ В НАСТРОЙКЕ СЛУЖБЫ ПРАВ
Посадку читают ДВА процесса: служба прав и край. Ни один из них не вправе импортировать внутренности другого, поэтому словарь, оставленный в настройке одного, был бы переписан во втором — и разошёлся бы с первым молча, на первом же новом значении. Горизонтальное живёт в общем фундаменте.
───────────────────────────────────────────────────────────────────────────── СЛОВАРЬ ТОЧНЫЙ, БЕЗ ПРИВЕДЕНИЯ РЕГИСТРА И БЕЗ ОБРЕЗКИ
Разбор сверяет значение ДОСЛОВНО. Причина не в педантизме: соседняя раскладка (`Own`), лишний символ (`own `) и омоглиф кириллицы (`оwn` — буква `о` из другого алфавита) на глаз неотличимы от законного значения, а приведение регистра и обрезка сделали бы часть из них законными молча. Величина, от которой зависит, поднимется ли стенд, читается точным совпадением либо отвергается с именем поля.
Index ¶
Constants ¶
const FieldName = "identity-provider"
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 — прежняя посадка «личность проверяет внешний поставщик». Из // словаря снята (corelib#30): разбор её не производит, перечни её не // называют, проверка старта Validate её отвергает. Число прежнее — значение // константы в v1 не меняется. // // Deprecated: посадка с внешним поставщиком удостоверений снята. Parse её // отвергает, Values и Names её не перечисляют, но тип — целое, поэтому // преобразование типа или декодер, пишущий число прямо в поле, по-прежнему // производят её мимо Parse. Отвергайте её на проверке старта через Validate, // который отказывает ей наравне с любым другим значением вне словаря, а // ветку, читающую External, снимайте только после того, как перед ней встал // Validate. Имя сохранено для потребителей, поднимающих пин в пределах v1, и // снимается только мажорным выпуском модуля. External // Own — личность проверяем мы сами; адреса поставщика не // требуются, вместо них обязательна своя чеканка и свой вход человека. // // Переходным была объявлена посадка `external` (решение оркестратора по // §15 приёмки Ф4д) — она снята; `own` — то, к чему платформа пришла. Own )
Значения. Нулевое — «не задано», и оно НЕ входит в словарь законных.
func Parse ¶
Parse — поточечно обратная String() для законных значений.
Отказ называет поле и перечень законных значений; отката к «безопасному» значению не происходит — возвращается Unset, то есть «ответа нет». Вызывающий, проглотивший ошибку, получит незаданную посадку и упрётся в тот же отказ старта, а не в молча выбранную полосу.
func Values ¶
func Values() []Provider
Values возвращает законные значения поля — ВЫВЕДЕННЫЕ из словаря, а не выписанные вызывающим.
func (Provider) IsLegal ¶ added in v1.10.0
IsLegal сообщает, стоит ли значение в словаре. Unset и любое число вне словаря, в том числе снятое External, законными не являются.
func (Provider) IsSet ¶
IsSet сообщает, объявил ли профиль поле — каким угодно значением, в том числе вне словаря. Объявлено не значит законно: число, записанное в поле мимо Parse, IsSet считает объявленным, поэтому проверке старта его мало: число вне словаря отвергает только Validate. Потребители, судящие на старте IsSet, и задачи их перевода названы в шапке пакета.
func (Provider) MarshalJSON ¶
MarshalJSON / UnmarshalJSON — сериализация под ту же дисциплину, что разбор.
func (Provider) String ¶
String — каноническое имя. У «не задано» имени в словаре нет, и печатается оно так, чтобы в тексте отказа не выглядеть значением.
func (*Provider) UnmarshalJSON ¶
UnmarshalJSON разбирает значение тем же Parse — второго разборщика не заводится.
func (Provider) Validate ¶ added in v1.10.0
Validate — проверка старта. Исходов три, и у каждого свой ответ: законное значение — nil; поле не объявлено — NotDeclared(setting); объявлено числом вне словаря — отказ, называющий ручку вызывающего, это число и законный перечень. Последний исход отдельный намеренно: «не объявлено» послало бы оператора дописывать поле, которое он уже написал.