فعلا قابلیت پخش رسانه در مرورگر فراهم نیست
مشاهده در پیام رسان ایتا
فعلا قابلیت پخش رسانه در مرورگر فراهم نیست
مشاهده در پیام رسان ایتا
فعلا قابلیت پخش رسانه در مرورگر فراهم نیست
مشاهده در پیام رسان ایتا
فعلا قابلیت پخش رسانه در مرورگر فراهم نیست
مشاهده در پیام رسان ایتا
فعلا قابلیت پخش رسانه در مرورگر فراهم نیست
مشاهده در پیام رسان ایتا
فعلا قابلیت پخش رسانه در مرورگر فراهم نیست
مشاهده در پیام رسان ایتا
پروژه ASP.Net Core MVC (وب و سی شارپ)
:::writing
📦 آشنایی با Areas و Identity در ASP.NET Core
وقتی یک پروژه ASP.NET Core بزرگتر میشود، مدیریت صفحهها، کنترلرها و بخشهای مختلف سختتر میشود. برای همین مایکروسافت دو مفهوم مهم را ارائه کرده است: Areas و Identity.
بیایید خیلی ساده و کاربردی با آنها آشنا شویم. 👇
---
## 🧭 Areas چیست؟
Areas راهی برای تقسیم یک پروژه بزرگ به چند بخش منطقی است.
فرض کنید یک سایت دارید که شامل این قسمتهاست:
👤 بخش کاربران
🛒 بخش فروشگاه
🛠 بخش مدیریت (Admin)
اگر همه اینها در یک پوشه قرار بگیرند، پروژه خیلی شلوغ میشود.
اینجاست که Areas کمک میکند.
با Areas میتوانید پروژه را به چند ناحیه (Area) تقسیم کنید.
مثلاً:
📁 Admin
📁 Customer
📁 Identity
هر کدام از این Areas میتوانند کنترلر، ویو و مدلهای مخصوص خودشان را داشته باشند.
به زبان ساده:
👉 Areas مثل یک پروژه کوچک داخل پروژه اصلی هستند.
مزایا:
✅ سازماندهی بهتر پروژه
✅ مناسب برای پروژههای بزرگ
✅ جدا کردن بخشهای مختلف سایت
---
## 🔐 Identity چیست؟
ASP.NET Core Identity یک سیستم آماده برای مدیریت کاربران است.
با Identity میتوانید خیلی راحت این قابلیتها را به سایت اضافه کنید:
👤 ثبتنام کاربران (Register)
🔑 ورود به سیستم (Login)
🚪 خروج از حساب (Logout)
🔒 تغییر رمز عبور
📧 تأیید ایمیل
🛡 مدیریت نقشها (Roles)
⛔️ جلوگیری از دسترسی غیرمجاز
به عبارت ساده:
Identity یک سیستم کامل احراز هویت و مدیریت کاربران است.
---
## 📁 چرا Identity داخل Areas قرار میگیرد؟
در ASP.NET Core معمولاً Identity داخل یک Area به نام Identity قرار میگیرد.
مثلاً ساختار پروژه ممکن است اینطور باشد:
📁 Areas
📁 Identity
📁 Account
📁 Manage
این کار چند مزیت دارد:
✅ جدا شدن صفحات احراز هویت از بقیه سایت
✅ مرتبتر شدن ساختار پروژه
✅ امکان شخصیسازی صفحات ورود و ثبتنام
---
## 🧠 تفاوت Identity با Authorization
خیلیها این دو را اشتباه میگیرند.
🔐 Authentication (Identity)
یعنی: کاربر چه کسی است؟
مثال: Login
🛡 Authorization
یعنی: کاربر چه اجازهای دارد؟
مثال: دسترسی فقط برای Admin
---
## 🎯 جمعبندی
✅ Areas برای تقسیم پروژه به بخشهای مختلف استفاده میشود.
✅ Identity سیستم مدیریت کاربران در ASP.NET Core است.
✅ معمولاً Identity در یک Area جداگانه قرار میگیرد تا پروژه مرتبتر باشد.
---
اگر دوست دارید درباره این موضوعات بیشتر بدانید:
🔥 Role Based Authorization
🔥 ساخت Admin Panel
🔥 مدیریت کاربران
🔥 امنیت در ASP.NET Core
حتماً دنبال کنید. 🚀
:::
پروژه ASP.Net Core MVC (وب و سی شارپ)
من کاری کردم که همه را خودتون فارسی کنید
Areas.zip
حجم:
22.3K
تکمیل کردم و خودتون به پروژه اضافه کنید
فرض کنیم یک محصول در فروشگاه فقط ۱ عدد موجودی دارد.
دو کاربر تقریباً همزمان میخواهند آن را بخرند.
---
## سناریو ساده
موجودی محصول: 1
👤 کاربر A وارد صفحه محصول میشود
👤 کاربر B هم همان لحظه وارد همان صفحه میشود
هر دو صفحه نشان میدهد:
📦 موجودی: 1
حالا هر دو تقریباً همزمان روی خرید کلیک میکنند.
---
# اگر سیستم کنترل همزمانی نداشته باشد
اتفاقی که میافتد:
1️⃣ درخواست کاربر A به سرور میرسد
سیستم میبیند موجودی = 1
✅ خرید انجام میشود
📦 موجودی میشود 0
2️⃣ تقریباً همزمان درخواست کاربر B هم میرسد
سیستم هنوز فکر میکند موجودی = 1 (چون همزمان خوانده شده)
✅ خرید او هم انجام میشود
نتیجه:
🧾 دو سفارش ثبت شده
📦 ولی در واقع فقط ۱ محصول وجود داشته
این مشکل را میگویند:
⚠️ Race Condition
(رقابت بین درخواستها)
---
# در سیستم درست چه باید اتفاق بیفتد
سیستم باید اجازه بدهد:
✅ فقط یک نفر خرید موفق داشته باشد
❌ نفر دوم پیام بگیرد
مثلاً:
👤 کاربر A → خرید موفق ✅
👤 کاربر B → پیام:
🚫 "متأسفانه موجودی محصول تمام شده است"
---
# مثال واقعی فروشگاه
موجودی کفش: 1
👤 علی → خرید میکند ✅
👤 رضا → همزمان خرید میکند ❌
سیستم باید بگوید:
📢 "این کالا لحظاتی قبل توسط کاربر دیگری خریداری شد."
---
# چرا این مشکل رخ میدهد؟
چون در برنامهها معمولاً این اتفاق میافتد:
1️⃣ موجودی از دیتابیس خوانده میشود
2️⃣ بررسی میشود آیا > 0 است
3️⃣ بعد سفارش ثبت میشود
اگر دو درخواست خیلی نزدیک به هم بیایند، هر دو مرحله 1 را با همان مقدار انجام میدهند.
---
# نتیجه نهایی
اگر کنترل همزمانی نباشد:
⚠️ ممکن است چند نفر یک کالای آخر را بخرند.
اگر سیستم درست طراحی شده باشد:
✅ فقط یک نفر موفق میشود
❌ بقیه پیام اتمام موجودی میگیرند.