Kapitola 04 / 09
ENSK

SmartExchange · .NET 10 · Chapter 04

Generated relationship registry

Registry prepája CRM deklarácie s tromi konzumentmi: Context Resolver, validácia scope a SQL mapping factory.

Shared code · Intaker + Web APIReviewed · 2026-10-27

Kde používame registry

KonzumentVolanie / zodpovednosť
SmartExchangeAuthorizationContextResolver.ResolveAsync()GetRelationships(resource) → vyberie typy grants: root a priame ciele deklarácií.
SmartExchangeAuthorizationScopeValidatorGenerate(diagram) → dovolí pomenovaný scope iba pre deklarovaný vzťah resource→target.
Aplikačné mapovanie cez AuthorizationSqlMappingFactory.Create()Rovnaké relationship kroky premení na korelované SQL subquery.

SmartExchangeAuthorizationRelationshipRegistry.Generate(DiagramCrm) vytvorí AuthorizationRelationship: resource kind, alias atribútu, target kind/key a join kroky. GetRelationships(string) vráti definície pre jeden resource; ScopeValidator sprístupní validáciu nad metadátami v cache.

Použitie registry v oboch príkladoch

Výstup / použitie registryPerson exportInterestedParty export
Attributeresource.attr.companyIdsresource.attr.projectIds
TargetResourceKindCompanyProject
Generovaná cestaPerson → PersonInCompany → CompanyInterestedParty → Project
Výber resolveraPerson + CompanyInterestedParty + Project + Investor
Validácia scopeCompany/read/Resource je priamy Company fakt.InterestedParty/read/Project vyžaduje deklarovanú dvojicu.
SQL presadenieEXISTS PersonInCompany JOIN CompanyEXISTS Project

Oba vzťahy dodávajú dôveryhodnú SQL štruktúru; policy určí, prečo grant oprávňuje operáciu. Resolver ponechá všetky actions/scopes vybraných typov a nepokračuje rekurzívne cez ich ďalšie vzťahy. Investor sa pre InterestedParty vyberie ako ďalší priamo anotovaný cieľ; táto demo policy jeho grants nepoužíva.

Person relationship JSON · InterestedParty relationship JSON

Normalizácia a validácia scope

MetódaImplementované správanie
LegacySqlAuthorizationGrantAdapter.Normalize()Instance assignment → Instance scope; rovnaká entita → Resource scope; iný deklarovaný cieľ → pomenovaný scope. Konverzia medzi entitami vyžaduje aj jednoznačného vlastníka canonical permission.
ValidateResource(resource)Vyžaduje známy názov CRM entity vrátane presnej veľkosti písmen.
SupportsScope(resource, scope)Akceptuje Resource, Instance alebo deklarovanú dvojicu resource→target.
Validate(grant)Overí resource/scope, neprázdnu action a neprázdne ID záznamu okrem Instance scope.
Príklad: InterestedParty/read pridelené na Project sa zmení na InterestedParty / read / Project. Project/read sa nezmení na InterestedParty/read. Validácia overuje metadáta a konzistenciu kontraktu; prístup naďalej rozhoduje policy.

Generovanie registry odmieta aj nejednoznačné cesty, duplicitné aliasy a nepodporované key/deletion metadáta. SQL pridáva Deleted = 0 v každom kroku vzťahu; aplikácia ponechá deletion filter root query.