Kapitola 03 / 09
ENSK

SmartExchange · .NET 10 · Chapter 03

CRM annotations and Diagram

CRM deklaruje, ktoré cesty medzi entitami sú dostupné pre autorizáciu. Rovnaké metadáta riadia výber contextu, validáciu scope aj SQL mapovanie vzťahu.

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

Deklarácie pre oba export príklady

Person → Company

BmcGroup.CRM · Person.cs
[CrmAuthorizationRelation("companyIds",
    nameof(Person.PersonInCompanies),
    nameof(PersonInCompany.Company))]

Poskytuje companyIds cez spojovaciu entitu.

InterestedParty → Project

BmcGroup.CRM · InterestedParty.cs
[CrmAuthorizationRelation("projectIds",
    nameof(InterestedParty.Project))]

Poskytuje projectIds cez deklarovanú Project referenciu.

Obe anotácie spracuje DiagramCrm.Generate(). Oba aliasy sa použijú v podmienkach príslušných derived roles. Ani jedna anotácia nezapína export; akciu musí explicitne povoliť resource policy.

Už implementované metadáta

Trieda / memberVýstup / použitie
DiagramCrm.Generate(assemblies)Vytvorí CRM diagram existujúcim reflection postupom vrátane ACL anotácií a vzťahov.
DiagramClass.AuthorizationRelationsDeklarácie patriace danému resource.
DiagramAuthorizationRelationAttributeName, NavigationPath, odvodený TargetEntity.
DiagramAcl z CrmAclAttributeLegacy entity/permission kódy pre adapter. Číselné identifikátory zostávajú na tejto konverznej hranici.

Diagram rozpozná ciele navigácií; autorizačný registry overí použiteľnosť vzťahu a vytvorí neutrálne join kroky. Používame existujúce foreign-key/reverse-navigation metadáta; SQL cesty nezapisujeme do policy.

Sedem deklarovaných vzťahov

ResourcePolicy aliasCRM navigation
PersoncompanyIdsPersonInCompanies → Company
CompanypersonIdsPersonInCompanies → Person
ProjectinterestedPartyIdsInterestedPartys
InterestedPartyprojectIds / investorIdsProject / Investor
InvestorinterestedPartyIds / projectIdsInterestedParties / InterestedParties → Project
Generický kód, explicitné metadáta. Nový ACL vzťah vyžaduje anotáciu. Do resolvera ani SQL factory nepribudne vetva pre Person/Company. Príslušná policy podmienka zostáva explicitným business rozhodnutím; samotná anotácia prístup neaktivuje.

Cerbos pozná názov relationship atribútu vo výraze, nedostáva CRM graf ani FK metadáta. Pri plánovaní listu ponechá neznáme atribúty záznamu vo výslednej podmienke. Ich databázový význam dodá naše SQL mapovanie.