چرا User و Person مفاهیم متفاوتی هستند
وقتی بازطراحی Identity Service را شروع کردم، یکی از اولین تصمیمها جدا کردن User Account از Person بود.
اول غیرضروری بهنظر میرسید. بیشتر اپلیکیشنها یک جدول users دارند و همهچیز را آنجا میگذارند. برای خیلی از سیستمها همین کافی است.
اما هرچه سناریوهای واقعی را بیشتر دیدم، روشنتر شد: User و Person مرتبطاند — و یکی نیستند.
رویکرد رایج
یک اپلیکیشن معمولی اینطور شروع میکند:
User
├── first_name
├── last_name
├── email
├── phone
└── ...
ساده. سریع قابلشipped. درد وقتی ظاهر میشود که کسبوکار بزرگ میشود.
کنار هم
| User Account | Person | |
|---|---|---|
| وجود دارد چون… | نرمافزار به authz / نشست نیاز دارد | انسان بیرون از اپ وجود دارد |
| چرخهٔ عمر | ساخته، معلق، حذف میشود | حتی اگر حسابها بروند ادامه دارد |
| تعدد | یک شخص → چند حساب | یک هویت در چند زمینه |
| مالک چیست | اعتبارنامه، مجوز، نشست | هویت حقوقی، سازمان، تابعیت |
User متعلق به سیستم است
User Account یک مفهوم فنی است. وجود دارد چون نرمافزار نیاز دارد به:
- احراز هویت
- مجوزدهی
- مدیریت نشست
- کنترل دسترسی
بدون سیستم، User Account وجود ندارد. نرمافزار میسازدش و مدیریتش میکند.
Person متعلق به دنیای واقعی است
Person مستقل از هر اپلیکیشنی وجود دارد. نرمافزار فقط آن را بازنمایی میکند.
روی کاغذ ظریف است. در اسکیما تعیینکننده.
فشارهای دنیای واقعی
یک شخص میتواند چند حساب داشته باشد
- حساب شخصی
- حساب سازمانی
- حساب شریک
همان انسان. سطح دسترسی متفاوت.
حساب کاربری میتواند محو شود
حذف، تعلیق، بایگانی — شخص هنوز هست. یکیکردن هر دو، بازیابی و audit را درهم میکند.
یک شخص میتواند به چند سازمان تعلق داشته باشد
کارمند، پیمانکار، مشتری، سهامدار — وقتی Person مستقل باشد تمیزتر است.
مدل من
بهجای اینکه User مرکز همهچیز باشد، Person هاب شد:
Person
│
├── User Account #1
├── User Account #2
└── Organization Employee
- Person → هویت واقعی
- User Account → دسترسی به یک سیستم مشخص
- هر کدام مسئولیت و چرخهٔ عمر خودش را دارد
مزایا
| مزیت | چه میگیرید |
|---|---|
| دامنهٔ تمیزتر | اسکیما واقعیت را منعکس میکند |
| انعطاف | نوع حساب جدید بدون بازنویسی «انسان» |
| coupling کمتر | تغییر auth دادهٔ person را بههم نمیریزد |
| مدل سازمان | نقشها بدون انباشتن همهچیز در users |
درسی دربارهٔ معماری
خیلی از مشکلات معماری وقتی شروع میشوند که مفاهیمی را که شبیه هم بهنظر میرسند ولی چیز دیگریاند، یکی کنیم.
User و Person یکی از همانهاست. مرتبط. نه یکسان. تشخیص زودهنگامش پیچیدگی بعدی را کم میکند.
نکته
احراز هویت معمولاً بخش آسان است. مدلکردن واقعیت سخت است — و اغلب با جدا کردن User از Person شروع میشود.
ادامه: اطلاعات تماس بهعنوان Aggregate.
نسخهٔ canonical. همچنین در Medium.