eitaa logo
پروژه ASP.Net Core MVC (وب و سی شارپ)
120 دنبال‌کننده
168 عکس
38 ویدیو
376 فایل
❁﷽❁ آموزش 📖 برنامه نویسی ASP.Net Core MVC (وب و سی شارپ) Admin: @alialirezapanahi برنامه نویسی برنامه نویسی سی شارپ eitaa.com/sisharpapp برنامه نویسی وب eitaa.com/aspdatnet ویراستی virasty.com/alialirezapanahi آپارات aparat.com/alialirezapanahi
مشاهده در ایتا
دانلود
پروژه 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 فراهم می‌کند. از کوکی‌ها برای مدیریت وضعیت ورود کاربران استفاده می‌شود و سیاست‌های مبتنی بر نقش‌ها برای کنترل دسترسی تعریف شده‌اند. این رویکرد ساده و مؤثر است و می‌تواند به راحتی گسترش یابد.
سلام به همه دوستان من آموزش ها را در سایت باگتو دنبال کردم و پروژه من با دات نت 8 نوشتم و در کانالم به اشتراک گذاشتم شما برای یاد گیری اگر نیاز به آموزش ویدئو داشتید وارد سایت باگتو شوید و ویدئو های رایگان را دانلود کنید و آموزش ها را طبق پروژه من دنبال کند به خطا نخورید https://bugeto.net/courses/free-introductory-asp-dot-net-core-training-course
یک نکته مهم یادم رفت این هست که یک سوال از هوش مصنوعی پرسیدم که چگونه پروژه من را دیگران به درستی اجرا و تست کند برای اطمینان از اینکه فرد دیگری بتواند پروژه شما را به درستی اجرا و تست کند، باید چند مرحله را دنبال کند. در اینجا یک راهنمای کامل برای راه‌اندازی پروژه شما آورده شده است: ### ۱. بررسی نسخه ویژوال استودیو نصب ویژوال استودیو 2022 یا جدیدتر - مطمئن شوید که ویژوال استودیو 2022 یا جدیدتر نصب شده باشد. - در حین نصب، اطمینان حاصل کنید که بسته‌های مربوط به توسعه وب با ASP.NET و توسعه دات نت (با استفاده از دات نت 8) نصب شده باشند. ### ۲. نصب SQL Server نصب SQL Server - اگر SQL Server نصب نشده است، می‌تواند از [SQL Server Express] https://www.microsoft.com/en-us/sql-server/sql-server-downloads که نسخه رایگان SQL Server است، استفاده کند. - همچنین می‌تواند از [SQL Server Management Studio (SSMS)] https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms برای مدیریت پایگاه داده استفاده کند. ### ۳. تنظیمات Connection String ویرایش Connection String در فایل appsettings.json - فایل appsettings.json را در پروژه پیدا کنید و مطمئن شوید که Connection String به درستی تنظیم شده است. به عنوان مثال: json { "ConnectionStrings": { "DefaultConnection": "Server=.\\SQLEXPRESS;Database=ChartProjectDB;Trusted_Connection=True;Encrypt=False;" } } یا در program.cs string connectionString = @"Server=.\SQLEXPRESS; Database=Test_StoreDb; Integrated Security=True; TrustServerCertificate=True;"; builder.Services.AddDbContext<DataBaseContext>(options => options.UseSqlServer(connectionString)); در -
Server=.;
برای اتصال به یک SQL Server محلی استفاده می‌شود. اگر SQL Server در یک سرور دیگر نصب شده باشد، باید نام سرور جایگزین شود.
Server=.;
یا
Server=.\\SQLEXPRESS;
### ۴. اجرای Migrations اجرای Migrations برای ایجاد جداول در پایگاه داده 1. باز کردن Package Manager Console: - به ویژوال استودیو بروید و از منوی Tools، گزینه NuGet Package Manager و سپس Package Manager Console را انتخاب کنید. 2. اجرای دستور Update-Database: - در کنسول باز شده، دستور زیر را برای اعمال Migrations و ایجاد جداول در پایگاه داده اجرا کنید: powershell Update-Database ### ۵. اجرای پروژه اجرای پروژه در ویژوال استودیو - حالا می‌تواند پروژه را با کلیک بر روی دکمه
Run
یا فشار دادن کلید
F5
اجرا کند. ### نکات اضافی - نصب بسته‌های مورد نیاز: قبل از اجرای پروژه، اطمینان حاصل کند که همه بسته‌های مورد نیاز با اجرای دستور
dotnet restore
در کنسول مدیریت بسته‌ها نصب شده باشند. - بررسی فایل‌های لاگ: اگر باز هم خطاها ادامه داشت، فایل‌های لاگ را بررسی کند تا جزئیات خطاها را مشاهده کند و بتواند مشکلات را بهتر شناسایی کند.