پروژه ASP.Net Core MVC (وب و سی شارپ)
درس آخر فروشگاه مدیریت سفارش فروشگاه و مدیریت پرداخت ها و Authorization و Authentication در ادمین
### ۵. خروجی `ResultDto`
csharp
return new ResultDto()
{
IsSuccess = true,
Message = "",
};
- خروجی سرویس نشاندهنده موفقیت عملیات و یک پیام توضیحی (در اینجا خالی) است.
---
### ۶. نقاط قوت کد
1. طراحی ماژولار: تمامی مراحل به صورت گام به گام و قابل فهم طراحی شدهاند.
2. مدیریت ارتباطات: استفاده از ارتباطات مستقیم بین سبد خرید، پرداخت و سفارشها.
3. انعطافپذیری: قابلیت استفاده مجدد از این سرویس در بخشهای مختلف سیستم.
---
### ۷. پیشنهادات بهبود
1. افزودن مدیریت خطا:
- بررسی کنید که آیا موجودیتهای بازیابی شده (
user,
cart,
requestPay) خالی (
null) هستند یا نه. csharp if (user == null || cart == null || requestPay == null) { return new ResultDto { IsSuccess = false, Message = "اطلاعات ناقص است." }; } 2. اعتبارسنجی دادههای ورودی: - بررسی کنید که شناسههای ورودی (
CartId,
RequestPayId,
UserId) مقادیر معتبر داشته باشند. 3. بهبود خوانایی: - جداسازی منطق به متدهای کوچکتر برای افزایش خوانایی و نگهداری کد. 4. ثبت لاگ عملیات: - برای ردیابی عملیات، ثبت لاگ در صورت موفقیت یا خطا مفید خواهد بود. --- ### جمعبندی این کد با طراحی مناسب، منطق مربوط به ایجاد سفارش جدید را پیادهسازی کرده است. با اعمال پیشنهادات بهبود، میتوانید قابلیت اطمینان، امنیت و خوانایی کد را افزایش دهید.
پروژه ASP.Net Core MVC (وب و سی شارپ)
درس آخر فروشگاه مدیریت سفارش فروشگاه و مدیریت پرداخت ها و Authorization و Authentication در ادمین
این کد مربوط به کنترلر
AuthenticationControllerاست که مدیریت ثبتنام، ورود و خروج کاربران را در یک فروشگاه آنلاین انجام میدهد. این کنترلر از ویژگیهای ASP.NET Core برای احراز هویت (Authentication) و مدیریت کاربران استفاده میکند. در ادامه توضیحات کامل درباره بخشهای مختلف این کد ارائه شده است: --- ### ۱. وابستگیها و تزریق سرویسها #### تزریق وابستگی: csharp private readonly IRegisterUserService _registerUserService; private readonly IUserLoginService _userLoginService; public AuthenticationController(IRegisterUserService registerUserService, IUserLoginService userLoginService) { _registerUserService = registerUserService; _userLoginService = userLoginService; } - دو سرویس زیر تزریق شدهاند: -
IRegisterUserService: برای مدیریت ثبتنام کاربران استفاده میشود. -
IUserLoginService: برای احراز هویت کاربران هنگام ورود استفاده میشود. - مزیت: استفاده از تزریق وابستگی کد را قابل تست و منعطف میکند. --- ### ۲. اکشن
Signup(ثبتنام کاربر) #### [HttpGet] Signup csharp [HttpGet] public IActionResult Signup() { return View(); } - یک اکشن ساده برای نمایش صفحه ثبتنام. - درخواست از نوع
GETاست و فقط View مربوط به ثبتنام را باز میگرداند. #### [HttpPost] Signup csharp [HttpPost] public IActionResult Signup(SignupViewModel request) - این اکشن وظیفه مدیریت ثبتنام کاربران را بر عهده دارد. - دادههای واردشده توسط کاربر در قالب
SignupViewModelدریافت میشوند. ##### مراحل ثبتنام: 1. اعتبارسنجی اولیه: - اطمینان از ارسال تمامی فیلدهای اجباری (
FullName,
Password,
RePassword). - بررسی برابر بودن رمز عبور و تکرار رمز عبور. - بررسی حداقل طول رمز عبور. - بررسی صحت فرمت ایمیل با استفاده از Regular Expression. 2. بررسی وضعیت ورود: - اگر کاربر از قبل وارد شده باشد، اجازه ثبتنام مجدد داده نمیشود. 3. فراخوانی سرویس ثبتنام: - دادهها به سرویس
RegisterUserServiceارسال میشوند: csharp var signeupResult = _registerUserService.Execute(new RequestRegisterUserDto { ... }); 4. ایجاد Claims برای کاربر: - پس از موفقیت ثبتنام، اطلاعات کاربر در قالب
Claimsایجاد میشود که برای مدیریت احراز هویت استفاده میشود. - نمونه Claims: csharp var claims = new List<Claim>() { new Claim(ClaimTypes.NameIdentifier, signeupResult.Data.UserId.ToString()), new Claim(ClaimTypes.Email, request.Email), new Claim(ClaimTypes.Name, request.FullName), new Claim(ClaimTypes.Role, "Customer"), }; 5. ذخیره احراز هویت: - اطلاعات Claims با استفاده از کوکیها (Cookies) در سیستم ذخیره میشوند: csharp var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); HttpContext.SignInAsync(principal, properties); --- ### ۳. اکشن
Signin(ورود کاربر) #### [HttpGet] Signin csharp public IActionResult Signin(string ReturnUrl = "/") { ViewBag.url = ReturnUrl; return View(); } - نمایش فرم ورود. - پارامتر
ReturnUrlبرای نگهداری مسیر بازگشت کاربر پس از ورود استفاده میشود. #### [HttpPost] Signin csharp [HttpPost] public IActionResult Signin(string Email, string Password, string url = "/") - وظیفه احراز هویت کاربر با استفاده از ایمیل و رمز عبور. ##### مراحل ورود: 1. فراخوانی سرویس ورود: - اطلاعات ایمیل و رمز عبور برای اعتبارسنجی به سرویس
UserLoginServiceارسال میشوند: csharp var signupResult = _userLoginService.Execute(Email, Password); 2. ایجاد Claims برای کاربر: - اطلاعات کاربر شامل شناسه، ایمیل، و نقشها در قالب Claims ایجاد میشود: csharp foreach (var item in signupResult.Data.Roles) { claims.Add(new Claim(ClaimTypes.Role, item)); } 3. ذخیره اطلاعات ورود: - اطلاعات Claims با استفاده از کوکی ذخیره میشوند و زمان انقضای کوکی تنظیم میشود: csharp var properties = new AuthenticationProperties() { IsPersistent = true, ExpiresUtc = DateTime.Now.AddDays(5), }; ---
پروژه ASP.Net Core MVC (وب و سی شارپ)
درس آخر فروشگاه مدیریت سفارش فروشگاه و مدیریت پرداخت ها و Authorization و Authentication در ادمین
۴. اکشن
SignOut(خروج کاربر) خروج از حساب کاربری: csharp public IActionResult SignOut() { HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return RedirectToAction("Index", "Home"); } - کاربر را از سیستم خارج میکند. - تمامی کوکیهای مربوط به احراز هویت حذف میشوند. --- ### ۵. اعتبارسنجی و امنیت - اعتبارسنجی رمز عبور: - بررسی طول و مطابقت رمز عبور. - اعتبارسنجی ایمیل: - استفاده از Regex برای بررسی فرمت ایمیل. - جلوگیری از ثبتنام مکرر: - بررسی وضعیت ورود کاربر پیش از ثبتنام. --- ### ۶. نقاط قوت کد 1. جداسازی وظایف: ثبتنام، ورود و خروج هر کدام در اکشنهای جداگانه مدیریت میشوند. 2. استفاده از Claims: برای مدیریت نقشها و اطلاعات کاربری در سیستم احراز هویت استفاده میشود. 3. اعتبارسنجی اولیه: بررسی دادههای ورودی پیش از ارسال به سرویسها انجام شده است. --- ### ۷. پیشنهادات بهبود 1. اضافه کردن پیامهای مناسبتر: - پیامهای کاربرپسندتر در هنگام خطا (مثلاً فرمت ایمیل اشتباه). 2. پیادهسازی کلمات عبور قویتر: - بررسی شرایط پیچیدگی رمز عبور (مانند حداقل یک حرف بزرگ و یک عدد). 3. پشتیبانی از قابلیت Remember Me: - اضافه کردن گزینه برای ذخیره وضعیت ورود کاربر به مدت طولانیتر. --- ### جمعبندی این کنترلر عملکرد خوبی برای مدیریت عملیات احراز هویت (Authentication) کاربران ارائه میدهد. با استفاده از ابزارهای امنیتی مانند Claims و کوکیها، امنیت سیستم افزایش پیدا کرده است. همچنین، اعتبارسنجی دادهها در مراحل مختلف، کد را امنتر و مطمئنتر کرده است.
پروژه ASP.Net Core MVC (وب و سی شارپ)
درس آخر فروشگاه مدیریت سفارش فروشگاه و مدیریت پرداخت ها و Authorization و Authentication در ادمین
این کد مربوط به یک کلاس استاتیک به نام
ClaimUtilityاست که ابزارهایی برای مدیریت و استخراج اطلاعات از ClaimsPrincipal در ASP.NET Core ارائه میدهد. در ASP.NET Core، ClaimsPrincipal یک شیء است که اطلاعات احراز هویت و مجوزهای کاربر، مانند شناسه کاربر، ایمیل و نقشها را ذخیره میکند. بیایید هر بخش از این کد را بررسی کنیم: --- ### ۱. کلاس و هدف کلی csharp public static class ClaimUtility - نوع کلاس: استاتیک. - هدف: این کلاس شامل متدهایی برای استخراج اطلاعات کلیدی از ClaimsPrincipal، مثل شناسه کاربر، ایمیل و نقشها است. --- ### ۲. متد `GetUserId` csharp public static long? GetUserId(ClaimsPrincipal User) #### شرح عملکرد: 1. ورودی: - یک شیء
ClaimsPrincipalکه اطلاعات کاربر احراز هویت شده را نگهداری میکند. 2. منطق کاری: - تلاش میکند مقدار ClaimTypes.NameIdentifier را که معمولاً شامل شناسه کاربر است، پیدا کند. - اگر یافت شود، مقدار آن به
longتبدیل میشود و بازگردانده میشود. 3. مدیریت خطا: - اگر هیچ Claim با نوع
NameIdentifierپیدا نشود یا خطایی رخ دهد، مقدار
nullبازگردانده میشود. #### مثال استفاده: csharp long? userId = ClaimUtility.GetUserId(User); if (userId != null) { Console.WriteLine($"شناسه کاربر: {userId}"); } --- ### ۳. متد `GetUserEmail` csharp public static string GetUserEmail(ClaimsPrincipal User) #### شرح عملکرد: 1. ورودی: - یک شیء
ClaimsPrincipalکه شامل اطلاعات Claims است. 2. منطق کاری: - تلاش میکند مقدار ClaimTypes.Email (ایمیل کاربر) را پیدا و بازگرداند. 3. مدیریت خطا: - اگر خطایی رخ دهد یا Claim مربوط به ایمیل وجود نداشته باشد، مقدار
nullبازگردانده میشود. #### مثال استفاده: csharp string email = ClaimUtility.GetUserEmail(User); if (!string.IsNullOrEmpty(email)) { Console.WriteLine($"ایمیل کاربر: {email}"); } --- ### ۴. متد `GetRolse` csharp public static List<string> GetRolse(ClaimsPrincipal User) #### شرح عملکرد: 1. ورودی: - یک شیء
ClaimsPrincipal. 2. منطق کاری: - تمامی Claims که نوع آنها به "role" ختم میشود، استخراج شده و مقادیر آنها به صورت لیستی از رشتهها بازگردانده میشوند. - این Claims معمولاً نشاندهنده نقشهای کاربر در سیستم هستند. 3. مدیریت خطا: - اگر خطایی رخ دهد، مقدار
nullبازگردانده میشود. #### مثال استفاده: csharp List<string> roles = ClaimUtility.GetRolse(User); foreach (var role in roles) { Console.WriteLine($"نقش: {role}"); } --- ### ۵. نقاط قوت کد 1. ساده و کاربردی: - متدها به صورت جداگانه مسئول استخراج اطلاعات خاص از Claims هستند. 2. مدیریت خطا: - هر متد با استفاده از بلوک
try-catchخطاهای احتمالی را مدیریت میکند و برنامه از کرش شدن جلوگیری میشود. 3. استفاده از LINQ: - برای جستجوی نقشها از LINQ استفاده شده است که کد را خواناتر کرده است. --- ### ۶. پیشنهادات بهبود 1. اصلاح نام متد `GetRolse`: - نام متد باید
GetRolesباشد تا اشتباه تایپی (
Rolse) اصلاح شود و خوانایی کد افزایش یابد. csharp public static List<string> GetRoles(ClaimsPrincipal User) 2. ثبت لاگ در مدیریت خطا: - به جای بازگشت `null`، میتوان خطاها را در سیستم لاگ ثبت کرد: csharp catch (Exception ex) { // ثبت خطا در سیستم لاگ Console.WriteLine($"خطا: {ex.Message}"); return null; } 3. بررسی مقادیر Claims پیش از استفاده: - در متد
GetUserEmail`، بهتر است بررسی شود که آیا `FindFirstمقدار
nullبازگردانده است یا خیر: csharp var emailClaim = claimsIdentity.FindFirst(ClaimTypes.Email); return emailClaim != null ? emailClaim.Value : null; 4. ایجاد تستهای واحد: - برای اطمینان از صحت عملکرد متدها، تستهای واحد (Unit Tests) برای هر متد ایجاد شود. --- ### ۷. کاربرد عملی این کلاس معمولاً در پروژههایی که از ASP.NET Core Identity یا Cookie Authentication برای مدیریت کاربران استفاده میکنند، به کار میرود: - بررسی نقش کاربر برای نمایش یا پنهان کردن گزینههای منو. - دریافت شناسه یا ایمیل کاربر احراز هویت شده برای استفاده در عملیات پایگاه داده. - تأمین امنیت بخشهای خاص برنامه بر اساس نقش کاربر. --- ### جمعبندی کلاس
ClaimUtilityیک ابزار ساده و قدرتمند برای مدیریت اطلاعات کاربران احراز هویت شده است. این کلاس امکان استخراج شناسه، ایمیل و نقشهای کاربر را فراهم میکند. با اعمال بهبودهای پیشنهادی، میتوان عملکرد و قابلیت نگهداری آن را افزایش داد.
پروژه ASP.Net Core MVC (وب و سی شارپ)
درس آخر فروشگاه مدیریت سفارش فروشگاه و مدیریت پرداخت ها و Authorization و Authentication در ادمین
این کد مربوط به یک کنترلر در بخش مدیریت (Admin) یک سایت است که وظیفه مدیریت دستهبندیها را بر عهده دارد. این کنترلر شامل عملیاتهایی برای نمایش لیست دستهبندیها، اضافه کردن دستهبندی جدید و مدیریت دستهبندیها است. در ادامه بخشهای مختلف این کد را توضیح میدهیم:
---
۱. مشخصات کلی کنترلر
ویژگی
[Area("Admin")]:
csharp
[Area("Admin")]
- این ویژگی نشاندهنده این است که کنترلر مربوط به بخش مدیریت سایت است.
- مسیر دسترسی به کنترلر شامل نام بخش خواهد بود (مثلاً /Admin/Categories). ویژگی
[Authorize(Roles = "Admin,Operator")]: csharp [Authorize(Roles = "Admin,Operator")] - این ویژگی دسترسی به کنترلر را محدود به کاربران با نقشهای
Adminیا
Operatorمیکند. - اگر کاربر وارد نشده باشد یا نقش مناسبی نداشته باشد، نمیتواند به این کنترلر دسترسی داشته باشد. --- ۲. وابستگیها و سازنده کنترلر تعریف وابستگی: csharp private readonly IProductFacad _productFacad; -
IProductFacad: این وابستگی به یک الگوی Facade اشاره دارد که عملیات مربوط به محصولات و دستهبندیها را مدیریت میکند. تزریق وابستگی: csharp public CategoriesController(IProductFacad productFacad) { _productFacad = productFacad; } - وابستگی
IProductFacadاز طریق سازنده کنترلر تزریق میشود. - این روش باعث افزایش تستپذیری و انعطافپذیری کنترلر میشود. --- ۳. اکشن
Index(نمایش لیست دستهبندیها) تعریف اکشن: csharp public IActionResult Index(long? parentId) { return View(_productFacad.GetCategoriesService.Execute(parentId).Data); } عملکرد: 1. ورودی: -
parentId: یک شناسه اختیاری برای نمایش زیرشاخههای دستهبندی. - اگر
parentIdمقدار داشته باشد، زیرشاخههای دستهبندی مربوطه نمایش داده میشوند. 2. فراخوانی سرویس: - از متد
Executeدر
GetCategoriesServiceوابسته به Facade استفاده میشود تا دستهبندیهای مرتبط بازیابی شوند. 3. خروجی: - دادههای بازیابیشده به View ارسال میشوند تا لیست دستهبندیها نمایش داده شود. مثال استفاده: - نمایش تمامی دستهبندیهای اصلی: /Admin/Categories/Index - نمایش زیرشاخههای یک دستهبندی: /Admin/Categories/Index?parentId=5 --- ۴. اکشن
AddNewCategory(افزودن دستهبندی جدید) نمایش فرم افزودن دستهبندی: csharp [HttpGet] public IActionResult AddNewCategory(long? parentId) { ViewBag.parentId = parentId; return View(); } - این اکشن با روش
GETفرم افزودن دستهبندی را نمایش میدهد. - مقدار
parentIdبه View ارسال میشود تا در صورت نیاز، دستهبندی والد مشخص شود. --- ثبت دستهبندی جدید: csharp [HttpPost] public IActionResult AddNewCategory(long? ParentId, string Name) { var result = _productFacad.AddNewCategoryService.Execute(ParentId, Name); return Json(result); } شرح عملکرد: 1. ورودی: -
ParentId: شناسه والد دستهبندی (اختیاری). -
Name: نام دستهبندی جدید. 2. فراخوانی سرویس: - متد
Executeاز
AddNewCategoryServiceفراخوانی میشود تا دستهبندی جدید ایجاد شود. 3. خروجی: - نتیجه عملیات به صورت JSON بازگردانده میشود. مثال استفاده: - افزودن یک دستهبندی اصلی: json { "ParentId": null, "Name": "دستهبندی جدید" } - افزودن یک زیرشاخه: json { "ParentId": 5, "Name": "زیرشاخه جدید" } --- ۵. الگوی Facade و وابستگیها این کنترلر به
IProductFacadوابسته است.
IProductFacadاحتمالاً شامل چندین سرویس است که عملیات مرتبط با دستهبندیها و محصولات را مدیریت میکنند. سرویسهای مورد استفاده: -
GetCategoriesService: برای بازیابی لیست دستهبندیها. -
AddNewCategoryService: برای ایجاد دستهبندی جدید. --- ۶. نقاط قوت کد 1. کنترل دسترسی: محدود کردن دسترسی به کاربران مجاز با استفاده از
[Authorize(Roles = "Admin,Operator")]. 2. استفاده از الگوی Facade: سرویسها از طریق یک نقطه ورود (Facade) مدیریت میشوند، که کد را خواناتر و قابل نگهداریتر میکند. 3. تعامل ساده با Viewها: دادهها به صورت مستقیم به View ارسال میشوند. 4. پشتیبانی از دستهبندیهای تو در تو: امکان ایجاد دستهبندیهای والد و زیرشاخهها به خوبی مدیریت شده است. --- ۷. پیشنهادات بهبود 1. اعتبارسنجی دادههای ورودی: - بررسی کنید که
Nameخالی یا خیلی کوتاه نباشد: csharp if (string.IsNullOrWhiteSpace(Name)) { return Json(new { IsSuccess = false, Message = "نام دستهبندی نمیتواند خالی باشد" }); }
پروژه ASP.Net Core MVC (وب و سی شارپ)
درس آخر فروشگاه مدیریت سفارش فروشگاه و مدیریت پرداخت ها و Authorization و Authentication در ادمین
2. مدیریت خطاها:
- در صورت بروز خطا در سرویس یا بازگشت نتیجه ناموفق، پیام مناسب به کاربر نمایش داده شود.
3. ثبت عملیات در لاگ:
- ثبت لاگ برای عملیات اضافه کردن دستهبندی یا خطاهای احتمالی میتواند مفید باشد.
---
جمعبندی
این کنترلر به خوبی مدیریت عملیات مرتبط با دستهبندیها را انجام میدهد و از اصول طراحی مناسب مانند تزریق وابستگی و استفاده از الگوی Facade بهره میبرد. قابلیتهایی مانند نمایش دستهبندیها، اضافه کردن زیرشاخهها و محدود کردن دسترسی با استفاده از نقشها، کد را امن و کاربردی کردهاند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
درس آخر فروشگاه مدیریت سفارش فروشگاه و مدیریت پرداخت ها و Authorization و Authentication در ادمین
این بخش از کد مربوط به ناوبری (Navigation) در بخش مدیریت (
Admin Layout) است و بر اساس نقشهای کاربری (
Adminو
Operator) مشخص میکند که آیا بخش "دستهبندیها" در منوی مدیریت نمایش داده شود یا خیر. در ادامه توضیحات کامل ارائه شده است: --- ۱. نقشها و بررسی دسترسی csharp @if (ClaimUtility.GetRolse(User).Where(p => p == "Admin" || p == "Operator").Count() >= 1) شرح عملکرد: - متد ClaimUtility.GetRolse(User) لیستی از نقشهای کاربر واردشده را برمیگرداند. - از شرط
Where(p => p == "Admin" || p == "Operator")استفاده میشود تا بررسی کند آیا کاربر نقش
Adminیا
Operatorدارد. - اگر تعداد نقشها بیشتر از 0 باشد (
Count() >= 1)، منوی دستهبندیها نمایش داده میشود. - این شرط تضمین میکند که فقط کاربران با نقشهای مجاز به این بخش دسترسی داشته باشند. --- ۲. طراحی منوی "دستهبندیها" html <li class="nav-item has-treeview "> <a href="#" class="nav-link active"> <i class="fa fa-tag"></i> <p> دسته بندی ها <i class="right fa fa-angle-left"></i> </p> </a> <ul class="nav nav-treeview"> <li class="nav-item"> <a href="~/admin/categories/" class="nav-link active"> <i class="fa fa-bookmark-o"></i> <p>دسته بندی ها </p> </a> </li> <li class="nav-item"> <a href="~/admin/categories/addnewcategory" class="nav-link active"> <i class="fa fa-plus nav-icon"></i> <p>افزودن دسته بندی جدید </p> </a> </li> </ul> </li> شرح طراحی: 1. مجموعه منو (
has-treeview): - کلاس
nav-item has-treeviewنشاندهنده این است که این گزینه دارای زیرمنو است. 2. لینک اصلی منو (
nav-link active): - لینک اصلی منو بهصورت فعال (
active) نشان داده شده است. -
fa fa-tag: یک آیکون برای دستهبندیها نمایش داده میشود. - متن "دسته بندی ها" و فلش کنار آن (
fa fa-angle-left) نمایش داده میشود. 3. زیرمنوها (
nav nav-treeview): - شامل دو گزینه است: - مشاهده دستهبندیها: لینک به
~/admin/categories/برای نمایش دستهبندیها. - افزودن دستهبندی جدید: لینک به
~/admin/categories/addnewcategoryبرای ایجاد دستهبندی جدید. --- ۳. نقاط قوت کد 1. کنترل دسترسی: - استفاده از نقشهای کاربری برای کنترل نمایش منو باعث افزایش امنیت و بهبود تجربه کاربری شده است. 2. طراحی خوانا و ساده: - ساختار HTML منو به خوبی طراحی شده و از کلاسهای Bootstrap برای استایلدهی استفاده شده است. 3. انعطافپذیری: - به راحتی میتوان گزینههای بیشتری به زیرمنو اضافه کرد یا نقشهای کاربری دیگری را به شرط دسترسی افزود. --- ۴. پیشنهادات بهبود 1. استفاده از
Anyبه جای
Whereو
Count: - شرط میتواند به این شکل سادهتر شود: csharp @if (ClaimUtility.GetRolse(User).Any(p => p == "Admin" || p == "Operator")) 2. نمایش منوی غیرفعال برای کاربران غیرمجاز: - به جای حذف منو برای کاربران غیرمجاز، میتوان منوی غیرفعال نمایش داد: html <li class="nav-item has-treeview disabled"> <a href="#" class="nav-link"> <i class="fa fa-tag"></i> <p>دسته بندی ها</p> </a> </li> 3. پیادهسازی سیاستهای دسترسی پیشرفته: - میتوانید از سیستم
Policy-Based Authorizationدر ASP.NET Core برای مدیریت دقیقتر دسترسیها استفاده کنید. --- جمعبندی این کد به خوبی نمایش منوی "دستهبندیها" را بر اساس نقشهای کاربری مدیریت میکند. طراحی ساده و استفاده از کلاسهای CSS و Bootstrap باعث بهبود خوانایی و کارایی شده است. با بهبودهای پیشنهادی، میتوانید این کد را مؤثرتر و منعطفتر کنید.
پروژه ASP.Net Core MVC (وب و سی شارپ)
درس آخر فروشگاه مدیریت سفارش فروشگاه و مدیریت پرداخت ها و Authorization و Authentication در ادمین
این کد مربوط به پیکربندی احراز هویت (Authentication) و مجوزها (Authorization) در پروژه ASP.NET Core است. این تنظیمات در فایل `Program.cs`استفاده میشوند تا مکانیزم امنیتی برای مدیریت کاربران و دسترسیها فعال شود. بیایید هر بخش از کد را بررسی کنیم:
---
### ۱. تنظیم مجوزها (Authorization)
#### بخش `AddAuthorization`:
csharp
builder.Services.AddAuthorization(options =>
{
options.AddPolicy(UserRoles.Admin, policy => policy.RequireRole(UserRoles.Admin));
options.AddPolicy(UserRoles.Customer, policy => policy.RequireRole(UserRoles.Customer));
options.AddPolicy(UserRoles.Operator, policy => policy.RequireRole(UserRoles.Operator));
});
#### عملکرد:
- افزودن سیاستهای دسترسی:
- در این بخش، سه سیاست دسترسی بر اساس نقشهای
Admin`، `Customerو
Operatorتعریف شدهاند. - `AddPolicy`: برای تعریف سیاستهای دسترسی استفاده میشود. - `RequireRole`: مشخص میکند که کاربر باید دارای نقش خاصی باشد تا بتواند از این سیاست استفاده کند. #### مثال: - اگر بخواهید دسترسی به یک اکشن را محدود به کاربران با نقش
Adminکنید، از سیاست تعریفشده استفاده میکنید: csharp [Authorize(Policy = UserRoles.Admin)] public IActionResult AdminOnly() { return View(); } #### کاربرد سیاستها: - سیاستها به صورت انعطافپذیر به اکشنها یا کنترلرها اعمال میشوند. - میتوانید سیاستهای پیچیدهتر تعریف کنید (مثلاً بررسی شرایط مختلف). --- ### ۲. تنظیم احراز هویت (Authentication) #### بخش `AddAuthentication`: csharp builder.Services.AddAuthentication(options => { options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme; }); #### عملکرد: - افزودن سیستم احراز هویت: - این بخش مکانیزم احراز هویت را فعال میکند. - `DefaultSignInScheme`: مشخص میکند که از کوکیها برای ورود کاربر استفاده شود. - `DefaultAuthenticateScheme`: تنظیمات مربوط به احراز هویت را مشخص میکند. - `DefaultChallengeScheme`: مشخص میکند که هنگام درخواست ورود، از کدام سیستم استفاده شود. --- ### ۳. تنظیمات کوکیها #### بخش `AddCookie`: csharp .AddCookie(options => { options.LoginPath = new PathString("/Authentication/Signin"); options.ExpireTimeSpan = TimeSpan.FromMinutes(5.0); options.AccessDeniedPath = new PathString("/Authentication/Signin"); }); #### عملکرد: - پیکربندی سیستم کوکیها: - `LoginPath`: مسیر نمایش صفحه ورود کاربر. اگر کاربر احراز هویت نشده باشد و به مسیری که نیاز به ورود دارد دسترسی پیدا کند، به این مسیر هدایت میشود. - مثال:
/Authentication/Signin. - `ExpireTimeSpan`: مدت زمان انقضای کوکیها. در اینجا کوکی پس از 5 دقیقه منقضی میشود. - `AccessDeniedPath`: مسیر نمایش صفحه دسترسی غیرمجاز. اگر کاربر احراز هویت شده اما دسترسی به مسیر خاصی ندارد، به این مسیر هدایت میشود. --- ### ۴. فرآیند کلی کار 1. تعریف نقشها و سیاستها: - در بخش `AddAuthorization`، سیاستهای مبتنی بر نقشها تعریف میشوند. - این سیاستها در کنترلرها و اکشنها برای محدود کردن دسترسی استفاده میشوند. 2. احراز هویت و کوکیها: - سیستم احراز هویت بر اساس کوکیها پیکربندی شده است. - مسیر ورود و دسترسی غیرمجاز مشخص شدهاند. --- ### ۵. نکات بهبود و بهترین روشها 1. مدت زمان انقضای کوکی: - اگر سیستم برای استفاده طولانیمدت طراحی شده است، مدت زمان انقضای کوکیها را افزایش دهید. - یا قابلیت
Remember Meاضافه کنید. 2. اضافه کردن صفحه دسترسی غیرمجاز: - صفحهای مخصوص برای نمایش پیام "دسترسی غیرمجاز" ایجاد کنید و در
AccessDeniedPathاستفاده کنید: csharp options.AccessDeniedPath = new PathString("/Authentication/AccessDenied"); 3. مدیریت نقشها در دیتابیس: - تعریف نقشها در کد (Hardcoded) ممکن است محدود باشد. به جای آن، نقشها را در پایگاه داده مدیریت کنید و از سیستم
RoleManagerاستفاده کنید. --- ### جمعبندی این کد تنظیمات اساسی برای مدیریت احراز هویت و دسترسیها در یک پروژه ASP.NET Core فراهم میکند. از کوکیها برای مدیریت وضعیت ورود کاربران استفاده میشود و سیاستهای مبتنی بر نقشها برای کنترل دسترسی تعریف شدهاند. این رویکرد ساده و مؤثر است و میتواند به راحتی گسترش یابد.
فهرست ASP,NET Core MVC
فصل اول آشنایی و تنظیمات ASP,NET Core
01- آشنایی با ASP,NET Core
02- نصب ASP,NET در ویژوال استودیو
03- تکنولوژیها و الگوهای پروژه در ASP,NET Core
04- ایجاد یک پروژه ASP,NET Core Web App (Model-View-Controller)
05- توضیح مختصری از پروژه
06- چرخه حیات درخواست در ASP,NET Core MVC
07- Middleware ها
08- Environment
09- لاگینگ (Logging)
فهرست ASP,NET Core MVC
فصل دوم معماری MVC
01-- معماری MVC
02- دیزاین پترنها (Design Patterns)
03- مدل (Model)
04- نما (View)
05- کنترلگر (Controller)
06- کنترل ها
07- مثال: Action
08- اکشن Attribute [NonAction]
09- اکشن Attribute [ActionName]
10- مدلها (Models)
11- ویو view
12- Razor
13- HTML Helpers
14- Tag Helpers
15- فایل Layout
16- رندربادی RenderBody()
17- RenderSection()
18- Error Handling و ViewImports
19- ValidationScriptsPartial
20- Error,cshtml
21- Program,cs یا Startup,cs
22- Routing
23- صفحه تماس
24- ترتیب قرارگیری مسیرها (Routes)
25- علامت سوال ? پارامتر id
26- اعتبارسنجی (Validation)
27- asp-validation-for
28- پارشیال (Partial View)
29- Attributeها
30- attribute phone
31- یک نمونه خروجی برای مدل User که شامل اعتبارسنجی
32- اگر کاربر فایل JavaScript را حذف کند
33- Fluent Validation
34- Scaffolding چیست
35- سه حالت ایجاد کنترلر
36- پروژه Scaffolding
37- Model Binding
38- قوانین کد نویسی تمیز
39- ViewData
40- ViewBag
41- ViewData
42- TempData
43- پارشیال ویو (Partial View)
44- ViewComponent
45- Area
فهرست ASP,NET Core MVC
فصل سوم آشنایی با Database و SQL Server
01- بانک اطلاعاتی یا دیتابیس (Database)
02- طراحی بانک اطلاعاتی
03- طراحی بانک اطلاعاتی SQL Server
04- Primary Keys
05- نمودارهای بانک اطلاعاتی یا Database diagrams
06- Foreign Keys
07- عملیات حذف، بهروزرسانی و اضافه کردن
08- Generate Script
09- Backup
فهرست ASP,NET Core MVC
فصل چهارم آموزش مقدماتی Ef Core
01- آشنایی ORM و EF و EF Core و ADO,NET و Dapper
02- ایجاد پروژه و نصب پکیج
03- نحوه اتصال به سرور SQL Server
04- Migration
05- ایجاد دیتابیس با asp,net core mvc
06- پروژه asp,net core mvc اتصال به دیتابیس و ایجاد جدول ها
07- DbContext و الگوهای Repository و Unit of Work
08- پروژه
09- متدها را که در هنگام کار با DbContext در Entity Framework Core