Documentation
¶
Overview ¶
Package platformmodules — ЕДИНСТВЕННОЕ объявление того, как один и тот же модуль платформы называется в трёх разных местах.
Написаний ТРИ, и они не выводятся друг из друга ¶
короткое имя службы каталог `services/<X>`, короткое имя SAN его mTLS модуль каталога сегмент пакета контрактов `proto/kacho/cloud/<Y>/` домен типов объекта приставка типов модели прав `<Z>_`
У большинства модулей все три совпадают. У балансировщика РАЗЛИЧНЫ ДВА из трёх: служба `nlb`, контракт `loadbalancer`, типы `nlb_listener`. Соответствие установлено решением, а не правилом, и вывести одно написание из другого нельзя ничем.
Почему это отдельное объявление в продукте, а не литерал у каждого читателя ¶
Замер (#1885): в корпусе гейтов соответствие «служба ↔ модуль каталога» было выписано ПЯТЬЮ независимыми копиями, и каждая объясняла в комментарии, почему вывести его нельзя, — пять раз об одном предмете. В продуктовом дереве его не было НИ ОДНОГО, поэтому «чей это тип» отвечала приставка имени, то есть соглашение об именовании.
Повторённая величина расходится молча. Здесь она одна, и КАЖДАЯ ЕЁ КОЛОНКА — проверяемый факт, а не заявление: гейт дерева TestPlatformModuleVocabularyMatchesTheTree сверяет короткое имя с каталогом служб, модуль каталога — с деревом контрактов, домен типов — с моделью прав, и печатает объём осмотренного по каждой колонке.
Чего здесь НЕТ и почему ¶
Отображения «тип объекта → модуль-владелец» здесь нет: полный перечень типов живёт в закрытой таблице `services/iam/internal/authzmap`, за границей видимости пакета, и вторая его копия разошлась бы с первой молча — ровно тот класс, ради которого пакет и заведён. Поэтому владение проверяется приставкой ОБЪЯВЛЕННОГО домена, а не полным словарём типов; переход на словарь держит задача #1816 — вместе с формой, которой личность вызывающего приезжает. Эпик #1087 — её основание, а не держатель: работы эпик не производит.
Index ¶
- func AliasesByCatalogModule() map[string]string
- func AliasesByService() map[string]string
- func CatalogModuleOfService(service string) (string, bool)
- func ObjectDomainOfService(service string) (string, bool)
- func ServiceOfCatalogModule(catalogModule string) (string, bool)
- func Services() []string
- type Module
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AliasesByCatalogModule ¶
AliasesByCatalogModule — та же карта в обратную сторону.
func AliasesByService ¶
AliasesByService — расхождения «короткое имя службы → модуль каталога», картой. Совпадающие написания в карту НЕ ПОПАДАЮТ, и это часть контракта: читатели таких карт трактуют отсутствие записи как «написания совпали», то есть совпадающая запись изменила бы смысл карты, ничего к ней не добавив.
Отдана здесь, а не собирается у каждого читателя: собранная на месте, она была бы шестой копией того же соответствия — ровно тем, что пакет и снял.
func CatalogModuleOfService ¶
CatalogModuleOfService — модуль каталога по короткому имени службы. ok=false — служба не объявлена.
func ObjectDomainOfService ¶
ObjectDomainOfService — приставка типов объекта по короткому имени службы.
Различайте два «нет»: ok=false — службы в объявлении нет вовсе; ok=true с пустой строкой — служба объявлена и типов объекта у неё НЕТ. Схлопывать их в один ответ нельзя: вызывающий, решающий по нему о доступе, обязан отличать «не знаю такого» от «знаю, и типов у него нет».
func ServiceOfCatalogModule ¶
ServiceOfCatalogModule — короткое имя службы по модулю каталога. ok=false — модуль не объявлен.
Types ¶
type Module ¶
type Module struct {
// Service — короткое имя службы: каталог `services/<Service>` и короткое
// имя SAN её клиентского сертификата.
Service string
// CatalogModule — сегмент пакета контрактов: `proto/kacho/cloud/<CatalogModule>`.
CatalogModule string
// ObjectDomain — приставка типов объекта модели прав (`<ObjectDomain>_`).
// ПУСТАЯ строка — не «неизвестно», а «модель не объявляет ни одного типа
// этого модуля»; так у geo, и это проверяемый факт, а не пропуск.
ObjectDomain string
}
Module — три написания одного модуля платформы.