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.
Kde používame registry
| Konzument | Volanie / zodpovednosť |
|---|---|
SmartExchangeAuthorizationContextResolver.ResolveAsync() | GetRelationships(resource) → vyberie typy grants: root a priame ciele deklarácií. |
SmartExchangeAuthorizationScopeValidator | Generate(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 registry | Person export | InterestedParty export |
|---|---|---|
| Attribute | resource.attr.companyIds | resource.attr.projectIds |
| TargetResourceKind | Company | Project |
| Generovaná cesta | Person → PersonInCompany → Company | InterestedParty → Project |
| Výber resolvera | Person + Company | InterestedParty + Project + Investor |
| Validácia scope | Company/read/Resource je priamy Company fakt. | InterestedParty/read/Project vyžaduje deklarovanú dvojicu. |
| SQL presadenie | EXISTS PersonInCompany JOIN Company | EXISTS 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óda | Implementované 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. |
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.