رفتن به محتوای اصلی
مصطفی عفتی

درباره این پلتفرم

دفتر کاری زنده برای تجربه‌های مهندسی

این پلتفرم مهندسی شخصی مصطفی عفتی است؛ جایی برای تبدیل تجربه عملی به نوشتار روشن، یادگیری ساختاریافته و محصولات دیجیتال کاربردی.

همکار دانشجویی

  • خانم زهرا احسانی

    دانشجوی سابق · مشارکت‌کننده در توسعه پلتفرم

    خانم زهرا احسانی در دوران تحصیل روی بخش‌هایی از این پلتفرم کار کرد و با مشارکت‌های دقیق و کاربردی به توسعه آن کمک کرد. خوشحالم که اینجا از کارش قدردانی می‌کنم.

اینجا چه پیدا می‌کنید

  • مقاله‌ها، کتاب‌ها، آموزش‌ها و اسنیپت‌های کاربردی.
  • دوره‌ها و مسیرهای یادگیری مبتنی بر تجربه‌های واقعی مهندسی.
  • مطالعات موردی، پروژه‌های متن‌باز، آزمایش‌ها و انتشار محصولات.

با طراحی آگاهانه

  • تجربه دو‌زبانه فارسی و انگلیسی با پشتیبانی بومی از RTL.
  • رابط‌های سازگار با تم و کیبورد، با یک زبان بصری متمرکز.
  • توسعه محتوا و محصول به‌عنوان یک سیستم یکپارچه و نسخه‌بندی‌شده.

این پلتفرم پیوسته در حال تکامل است. بعضی بخش‌ها محصولاتی کامل‌اند و برخی دیگر آزمایش‌های فعالی که هم‌زمان با پیشرفت کار بهتر می‌شوند.

چرا User و Person متفاوت‌اند

چرا حساب کاربری در سیستم‌های هویت همان انسان نیست.
Mostafa Effati3 دقیقه مطالعهsoftware-architecture

چرا User و Person مفاهیم متفاوتی هستند

وقتی بازطراحی Identity Service را شروع کردم، یکی از اولین تصمیم‌ها جدا کردن User Account از Person بود.

اول غیرضروری به‌نظر می‌رسید. بیشتر اپلیکیشن‌ها یک جدول users دارند و همه‌چیز را آنجا می‌گذارند. برای خیلی از سیستم‌ها همین کافی است.

اما هرچه سناریوهای واقعی را بیشتر دیدم، روشن‌تر شد: User و Person مرتبط‌اند — و یکی نیستند.

رویکرد رایج

یک اپلیکیشن معمولی این‌طور شروع می‌کند:

User
 ├── first_name
 ├── last_name
 ├── email
 ├── phone
 └── ...

ساده. سریع قابل‌شipped. درد وقتی ظاهر می‌شود که کسب‌وکار بزرگ می‌شود.

کنار هم

User AccountPerson
وجود دارد چون…نرم‌افزار به 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.

اسناد مرتبط

منوی دستور

↑ ↓برای حرکت · Enter برای انتخاب · Esc برای بستن
ناوبری
اقدامات

Esc برای بستن · ⌘K برای باز/بسته کردن