identityposture

package
v1.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 10, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package identityposture — ПОСАДКА ЛИЧНОСТИ: кто проверяет, что перед платформой именно этот человек (задача #1125, подфаза Ф4д эпика #896).

───────────────────────────────────────────────────────────────────────────── ЗАЧЕМ ПОЛЕ ВООБЩЕ ЕСТЬ

Платформа переезжает со внешнего поставщика удостоверений на свою чеканку. Пока переезд идёт, в дереве живут ОБА тракта, и требования у них противоположные: одному нужны три адреса поставщика, второму — ни одного. Стражи старта, написанные без этого различия, требуют адресов ВСЕГДА, и отдельный клон в боевой посадке не поднимается, сколько бы кода ни переехало: проверка настройки возвращает три отказа сразу.

Поле разводит эти требования явно. Оно не «переключатель возможностей» — оно ответ на вопрос, на который у стенда обязан быть ответ, и без ответа стенд не поднимается.

───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ УМОЛЧАНИЯ В КОДЕ НЕТ — обе альтернативы разобраны, а не отброшены

  • умолчание `external` заставило бы каждый профиль, поля не объявивший, требовать адресов, которых у него нет. Поле, которое ничего не разводит, — это поле без читателя;
  • умолчание `own` МОЛЧА сняло бы провайдерские требования у профиля, который просто забыли обновить. Это и есть состояние «продукт поднялся, а посадку никто не выбирал».

Умолчание живёт В ПРОФИЛЕ: базовый профиль зонтичного чарта объявляет значение явно, поэтому ни один существующий стенд не ломается, а отдельный клон обязан выбрать сам.

───────────────────────────────────────────────────────────────────────────── «НЕ ЗАДАНО» НЕ ПЕРЕСЕКАЕТСЯ С ОБЛАСТЬЮ ЗНАЧЕНИЙ

Нулевое значение типа — Unset — означает РОВНО «профиль поля не объявил» и законным значением поля не является. Пустая строка значением тоже не является: она не «безопасное умолчание», а отсутствие ответа.

───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ В ОБЩЕМ ФУНДАМЕНТЕ, А НЕ В НАСТРОЙКЕ СЛУЖБЫ ПРАВ

Посадку читают ДВА процесса: служба прав и край. Ни один из них не вправе импортировать внутренности другого, поэтому словарь, оставленный в настройке одного, был бы переписан во втором — и разошёлся бы с первым молча, на первом же новом значении. Горизонтальное живёт в общем фундаменте.

───────────────────────────────────────────────────────────────────────────── СЛОВАРЬ ТОЧНЫЙ, БЕЗ ПРИВЕДЕНИЯ РЕГИСТРА И БЕЗ ОБРЕЗКИ

Разбор сверяет значение ДОСЛОВНО. Причина не в педантизме: соседняя раскладка (`Own`), лишний символ (`own `) и омоглиф кириллицы (`оwn` — буква `о` из другого алфавита) на глаз неотличимы от законного значения, а приведение регистра и обрезка сделали бы часть из них законными молча. Величина, от которой зависит, требовать ли адресов внешнего поставщика, читается точным совпадением либо отвергается с именем поля.

Index

Constants

View Source
const FieldName = "identity-provider"

Setting — имя настройки. Объявлено один раз: его называют текст отказа старта, текст отказа разбора и документация профилей; три копии разошлись бы на той, которую забыли поправить. FieldName — КАНОНИЧЕСКОЕ имя поля, одинаковое у обоих процессов. Имя РУЧКИ у каждого своё (путь в настройке службы прав, переменная окружения на крае), и называет его вызывающий: отказ, назвавший чужую ручку, посылает оператора править не тот профиль.

Variables

This section is empty.

Functions

func Names

func Names() []string

Names возвращает канонические имена законных значений в порядке словаря — для текстов отказа и для табличных проб.

func NotDeclared

func NotDeclared(setting string) error

NotDeclared — отказ старта на профиле, поля не объявившем. Текст один на оба процесса: расхождение диагностики по процессам заставило бы оператора учить два объяснения одного предмета.

Types

type Provider

type Provider int

Provider — посадка личности: чем стенд проверяет человека.

const (
	// Unset — профиль поля не объявил. Отказ старта.
	Unset Provider = iota
	// External — личность проверяет внешний поставщик; его
	// адреса обязательны.
	External
	// Own — личность проверяем мы сами; адреса поставщика не
	// требуются, вместо них обязательна своя чеканка и свой вход человека.
	//
	// ПЕРЕХОДНОЕ ли это состояние: переходным объявлено `external` (решение
	// оркестратора по §15 приёмки Ф4д) — оно уходит вместе с последним стендом,
	// который его выбирает. `own` — то, к чему платформа приходит.
	Own
)

Значения. Нулевое — «не задано», и оно НЕ входит в словарь законных.

func Parse

func Parse(setting, s string) (Provider, error)

Parse — поточечно обратная String() для законных значений.

Отказ называет поле и ОБА законных значения; отката к «безопасному» значению не происходит — возвращается Unset, то есть «ответа нет». Вызывающий, проглотивший ошибку, получит незаданную посадку и упрётся в тот же отказ старта, а не в молча выбранную полосу.

func Values

func Values() []Provider

Values возвращает законные значения поля — ВЫВЕДЕННЫЕ из словаря, а не выписанные вызывающим.

func (Provider) IsSet

func (p Provider) IsSet() bool

IsSet сообщает, объявил ли профиль поле.

func (Provider) MarshalJSON

func (p Provider) MarshalJSON() ([]byte, error)

MarshalJSON / UnmarshalJSON — сериализация под ту же дисциплину, что разбор.

func (Provider) String

func (p Provider) String() string

String — каноническое имя. У «не задано» имени в словаре нет, и печатается оно так, чтобы в тексте отказа не выглядеть значением.

func (*Provider) UnmarshalJSON

func (p *Provider) UnmarshalJSON(b []byte) error

UnmarshalJSON разбирает значение тем же Parse — второго разборщика не заводится.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL