Organization و Location مال Identityاند
وقتی Person و User Account جدا شدند، عضویت سازمانی دیگر شبیه یک boolean روی ردیف profile نیست.
یک نفر میتواند Employee یک شرکت، contractor شرکت دیگر و customer سومی باشد — در حالی که یک یا چند User Account دارد. Location هم «رشتهٔ address روی User» نیست: Device، آدم و Org همه در geography مینشینند.
این فصل لایهٔ Context کتاب است: کسی در کار کیست، و چیزها کجا رخ میدهند.
Organization یک User با flag نیست
Organization lifecycle خودش را دارد: industry، type، legal name، tax id، parent org برای hierarchy، status history.
Organization
├── parent (optional hierarchy)
├── industry / type
├── legal identity fields
└── status + history
Employee رابطهٔ Person و Organization است — با position، department، بازهٔ hire، و contactهای محدود به Org.
این همان درس Citizenship است: membership یک relationship Aggregate است، نه فقط organization_id تا ابد روی Person.
چرا Employee Contact جداست
Work email و work phone همان channelهای personal روی User Account نیستند. مدل Organization-Employee Contact مرز verify و افشا را وقتی کسی شرکت را ترک میکند سالم نگه میدارد.
Location بهعنوان Domain، نه ستون متن
Geo در این سرویس ساختیافته است:
| لایه | نقش |
|---|---|
| Country / subdivision / city | Reference data |
| Location | Entity نقطهمانند با coordinates رمزشده |
| Search / proximity token | Blind lookup بدون plaintext coords در index |
| نشانههای geo در Device Session | Risk و context، نه address book دوم |
Device Session میتواند به country، subdivision و city ارجاع دهد. Location مختصات رمزشده بهعلاوهٔ search token (مختصات گردشده، proximity hash) نگه میدارد تا قابلیت «near me» لازم نباشد دنیا را در هر query decrypt کند.
این چه چیزی را جلوگیری میکند
| میانبر | صورتحساب بعدی |
|---|---|
company_name روی users | Merger، legal name، چند نهاد employer |
یک فیلد متن address | Normalization، privacy، proximity search |
| Role فقط در claimهای JWT | بدون تاریخچهٔ hire/leave، بدون درخت Org |
| Org خیلی زود در سرویس دیگر | Split-brain Identity برای همان انسان |
Status History بهعنوان الگو
Person، Contact، Session، Organization، Employee — خیلی از Aggregateها status بهعلاوهٔ جدول history دارند که با الگوی trigger مشترک جلو میرود. Identity فقط ردیف فعلی نیست؛ چرا و کی state عوض شده هم هست.
این برای KYC، support و تحقیقات امنیتی مهمتر از صفحهٔ profile قشنگ است.
برداشت
Identity جایی است که ساختار دنیای واقعی به system access میرسد. Organization و geography بخشی از آن ساختارند. پرتکردنشان بهعنوان فکر بعدی، دوباره جدول تخت users را میسازد — فقط با JSON بیشتر.
بعد
Backend میتواند درست باشد و محصول هنوز بشکند اگر Edge دو لایهٔ cookie را بد مدیریت کند. فصل آخر Frontend Session Edge است.
ادامه: Frontend Session Edge.