scopesourcecensus

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Sep 13, 2026 License: AGPL-3.0 Imports: 7 Imported by: 0

Documentation

Overview

Package scopesourcecensus строит ЗАПРОС переписи источников звена цепи областей — по типам, ВЫВЕДЕННЫМ из дерева, а не выписанным рядом.

Зачем генератор, а не запрос в теле скрипта

Перепись обязана высказаться о КАЖДОМ типе, чей структурный предок выводим из строки iam, — включая тип, у которого сегодня ноль объектов с обеих сторон. Прежняя редакция строила перепись полным внешним соединением с группировкой, поэтому тип с нулями в вывод не попадал ВОВСЕ: «о нём не сказано» было неотличимо от «у него всё хорошо». Единственный цикл при этом шёл по списку послаблений оператора, а не по каталогу типов, — то есть перечень типов задавал тот, кто прощает расхождения.

Здесь перечень берётся у владельца — `authzcascade.DerivableTypes`, — а предикат «у этого объекта источник предка законно пуст» у второго владельца — плана чтения материализации (`pg.IAMDirectContainments`). Выписанный перечень не сдвинулся бы от нового типа и продолжал бы сторожить прежние; выписанный предикат стал бы третьим местом об одном предмете.

Единица счёта — ОБЪЕКТ, а не строка журнала

У объекта бывает несколько указателей (у проекта их два — аккаунт и кластер), и счёт строк завысил бы стороны по-разному. Так же считает и вопрос о доступе: цепь поднимается по объектам.

Категорий исхода ПЯТЬ, и три из них — не находки

Прежняя перепись знала две («потеряно» и «лишних») и потому обязана была назвать находкой всё, что в них не помещалось. Категории:

в цепи        — у строки есть звено. Норма;
без предка    — у строки звена нет И источник предка законно пуст:
                системная роль (ни аккаунта, ни проекта — и она НЕ ДОЛЖНА
                становиться достижимой ни из одного аккаунта), привязка с
                областью вне закрытого набора, учётка с пустым аккаунтом.
                НЕ находка: посчитать их потерями значит показать предмет
                хуже, чем он есть, и следующий читатель начнёт «чинить»
                законное;
потеряно      — у строки звена нет, А ИСТОЧНИК ПРЕДКА НАЗЫВАЕТ. Находка
                всегда: форма отказывает там, где решатель разрешает, и
                отказ неотличим от честного;
лишних        — звено есть, а предка не называет НИ источник, НИ журнал.
                Обратная полярность: форма разрешает там, где решатель
                отказывает. Тише первой и потому опаснее;
нет строки    — объект назван журналом либо цепью, а СТРОКИ У НЕГО НЕТ.
                Отдельная категория, а не потеря цепи: идентификатор объекта
                И ЕСТЬ первичный ключ строки, поэтому объекта без строки не
                существует, и «цепь не дала ему предка» — верный ответ, а не
                пропуск. Это предмет #782 (объекты, живущие в графе прав и
                отсутствующие в собственной таблице), и он ПЕЧАТАЕТСЯ с
                атрибуцией, а не растворяется ни в находках, ни в тишине.

Почему «нет строки» не прощается послаблением, а выносится категорией

Послабление прощает РАСХОЖДЕНИЕ, у которого есть предмет, и обязано истекать вместе с ним. У этой категории предмет чужой и живёт своей задачей; прощать её как расхождение значило бы завести запись, снять которую нельзя ничем, что делает эта под-фаза, — то есть бессрочное послабление под видом срочного.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SQL

func SQL() (string, error)

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

func Plans() ([]TypePlan, error)

Plans выводит план переписи: по одной записи на КАЖДЫЙ выводимый тип.

Возвращает ошибку, если у выводимого типа нет плана чтения материализации: это не «пропустить тип», а расхождение двух перечней, которое обязано быть названо — иначе перепись молча перестанет высказываться о типе, чей предок объявлен выводимым.

Directories

Path Synopsis
cmd
scope-source-census-sql command
Команда scope-source-census-sql печатает запрос переписи источников звена цепи областей — либо перечень типов, о которых перепись обязана высказаться.
Команда scope-source-census-sql печатает запрос переписи источников звена цепи областей — либо перечень типов, о которых перепись обязана высказаться.

Jump to

Keyboard shortcuts

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