Documentation
¶
Overview ¶
Package scopesourcecensus строит ЗАПРОС переписи источников звена цепи областей — по типам, ВЫВЕДЕННЫМ из дерева, а не выписанным рядом.
Зачем генератор, а не запрос в теле скрипта ¶
Перепись обязана высказаться о КАЖДОМ типе, чей структурный предок выводим из строки iam, — включая тип, у которого сегодня ноль объектов с обеих сторон. Прежняя редакция строила перепись полным внешним соединением с группировкой, поэтому тип с нулями в вывод не попадал ВОВСЕ: «о нём не сказано» было неотличимо от «у него всё хорошо». Единственный цикл при этом шёл по списку послаблений оператора, а не по каталогу типов, — то есть перечень типов задавал тот, кто прощает расхождения.
Здесь перечень берётся у владельца — `authzcascade.DerivableTypes`, — а предикат «у этого объекта источник предка законно пуст» у второго владельца — плана чтения материализации (`pg.IAMDirectContainments`). Выписанный перечень не сдвинулся бы от нового типа и продолжал бы сторожить прежние; выписанный предикат стал бы третьим местом об одном предмете.
Единица счёта — ОБЪЕКТ, а не строка журнала ¶
У объекта бывает несколько указателей (у проекта их два — аккаунт и кластер), и счёт строк завысил бы стороны по-разному. Так же считает и вопрос о доступе: цепь поднимается по объектам.
Категорий исхода ПЯТЬ, и три из них — не находки ¶
Прежняя перепись знала две («потеряно» и «лишних») и потому обязана была назвать находкой всё, что в них не помещалось. Категории:
в цепи — у строки есть звено. Норма;
без предка — у строки звена нет И источник предка законно пуст:
системная роль (ни аккаунта, ни проекта — и она НЕ ДОЛЖНА
становиться достижимой ни из одного аккаунта), привязка с
областью вне закрытого набора, учётка с пустым аккаунтом.
НЕ находка: посчитать их потерями значит показать предмет
хуже, чем он есть, и следующий читатель начнёт «чинить»
законное;
потеряно — у строки звена нет, А ИСТОЧНИК ПРЕДКА НАЗЫВАЕТ. Находка
всегда: форма отказывает там, где решатель разрешает, и
отказ неотличим от честного;
лишних — звено есть, а предка не называет НИ источник, НИ журнал.
Обратная полярность: форма разрешает там, где решатель
отказывает. Тише первой и потому опаснее;
нет строки — объект назван журналом либо цепью, а СТРОКИ У НЕГО НЕТ.
Отдельная категория, а не потеря цепи: идентификатор объекта
И ЕСТЬ первичный ключ строки, поэтому объекта без строки не
существует, и «цепь не дала ему предка» — верный ответ, а не
пропуск. Это предмет #782 (объекты, живущие в графе прав и
отсутствующие в собственной таблице), и он ПЕЧАТАЕТСЯ с
атрибуцией, а не растворяется ни в находках, ни в тишине.
Почему «нет строки» не прощается послаблением, а выносится категорией ¶
Послабление прощает РАСХОЖДЕНИЕ, у которого есть предмет, и обязано истекать вместе с ним. У этой категории предмет чужой и живёт своей задачей; прощать её как расхождение значило бы завести запись, снять которую нельзя ничем, что делает эта под-фаза, — то есть бессрочное послабление под видом срочного.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func SQL ¶
SQL строит запрос переписи: по строке на тип, ВСЕГДА — включая тип с нулями с обеих сторон.
Идентификаторы подставляются из ЗАКРЫТЫХ перечней дерева (имя таблицы и выражения — литералы плана чтения, имя типа — ключ карты выводимых), снаружи сюда не приходит ничего, поэтому подстановка безопасна.
Types ¶
type TypePlan ¶
type TypePlan struct {
// ModelType — имя типа в словаре МОДЕЛИ (`iam_group`): им названы
// `relation_fact.object_type` и `resource_scope_edge.object_type`.
ModelType string
// CatalogType — то же имя в словаре КАТАЛОГА (`iam.group`): им назван план
// чтения материализации. Хранится рядом, чтобы перевод был виден, а не
// подразумевался.
CatalogType string
// Table, Join, ParentExpr — план чтения материализации. ParentExpr —
// СКЛЕЙКА обоих её выражений: источник считается называющим предка, если
// непусто хотя бы одно.
Table string
Join string
ParentExpr string
}
TypePlan — что перепись знает об одном типе, и откуда.
func Plans ¶
Plans выводит план переписи: по одной записи на КАЖДЫЙ выводимый тип.
Возвращает ошибку, если у выводимого типа нет плана чтения материализации: это не «пропустить тип», а расхождение двух перечней, которое обязано быть названо — иначе перепись молча перестанет высказываться о типе, чей предок объявлен выводимым.
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
scope-source-census-sql
command
Команда scope-source-census-sql печатает запрос переписи источников звена цепи областей — либо перечень типов, о которых перепись обязана высказаться.
|
Команда scope-source-census-sql печатает запрос переписи источников звена цепи областей — либо перечень типов, о которых перепись обязана высказаться. |