Role Management ، در این مقاله، نحوه ی استفاده از ASP.NET Core Identity در MVC Application برای ایجاد نقش کاربران و نمایش منو بسته به نقش کاربران را با جزئیات خواهیم دید.
در اینجا، خواهیم دید که چگونه:
- کاربران مدیر پیش فرض را ایجاد کنیم.
- نقش مدیر پیش فرض را ایجاد کنیم.
- کاربران احراز هویت نشده را مجدد به صفحه ی ورود به سیستم هدایت کنیم.
- منوی Admin Page را تنها برای Authorized Admin User (کاربر مدیر تأیید شده) نمایش دهیم.
ASP.NET Identity به ما امکان می دهد که قابلیت ورود را به سیستم خود اضافه کنیم.
ما مقالات زیادی در زمینه Identity و احراز هویت منتشر کردیم که از طریق لینک زیر در دسترس هستند :
در اینجا، در این پیش نمایش، از SQL Server برای ذخیره ی جزئیات کاربر و داده های پروفایل استفاده می کنیم.
از ASP.NET Identity برای ثبت کاربر جدید، ورود به سیستم، و حفظ داده های پروفایل کاربر استفاده خواهیم کرد.
اگر در رابطه با ورود به سیستم صحبت کنیم، بخش مهم این است که آیا کاربر وارد شده احراز هویت شده و نیز برای مشاهده ی صفحات، تأیید شده است یا خیر.
احراز هویت و تأیید
احراز هویت (Authorization)
بررسی برای Valid User. در اینجا، سوال این است که چگونه بررسی کنیم که آیا یک کاربر معتبر است یا خیر.
زمانیکه کاربری برای اولین بار به وب سایتی می آید، برای آن سایت ثبت نام می کند.
تمام اطلاعاتشان، مانند نام کاربری، رمز عبور، ایمیل، و … در پایگاه داده ی وب سایت ذخیره خواهد شد.
هنگامیکه کاربری userID (شناسه ی کاربری) و رمز عبور خود را وارد می کند، این اطلاعات با پایگاه داده بررسی خواهد شد.
اگر کاربر userID و Password یکسانی با آنچه در پایگاه داده وجود دارد وارد کرده باشد، آن فرد یک کاربر تأیید شده است و به صفحه ی خانه ی وب سایت هدایت خواهد شد.
اگر کاربر UserID یا Password وارد کرد که با پایگاه داده مطابقت ندارد، آنگاه صفحه ی ورود به سیستم پیامی مانند “Username یا Password معتبر وارد کنید”، خواهد داد.
کل فرآیند بررسی اینکه آیا کاربر برای دسترسی به وب سایت معتبر است یا خیر، Authentication (احراز هویت) نامیده می شود.
تأیید (Authorization)
هنگامیکه کاربر احراز هویت شد، نیاز است به صفحه ی مناسب با نقش وی هدایت شود.
برای مثال، هنگامیکه یک Admin (مدیر) وارد سیستم شد، نیاز است بعداز آن به Admin Page (صفحه ی مدیر) هدایت شود.
اگر یک Accountant (حسابدار) وارد شد، بعد از آن نیاز است به صفحه ی Accounts (حساب ها) هدایت شود.
پیش نیازها
مطمئن شوید که تمامی پیش نیازها را در کامپیوتر خود نصب کرده اید.اگر نه، تمامی آن ها را، یک به یک، دانلود و نصب کنید.
- ابتدا Visual Studio 2017 را از این لینک دانلود و نصب کنید
- SQL Server ۲۰۱۴ یا بالاتر
بکارگیری کد
مرحله ۱: ایجاد یک پایگاه داده
ابتدا، یک پایگاه داده ایجاد و رشته ی اتصال را در فایل appsettings.json برای DefaultConnection با اتصال جدید پایگاه داده ی خود تنظیم خواهیم کرد.
از این پایگاه داده برای ایجاد جدول ASP.NET Core Identity استفاده خواهیم کرد.
ایجاد پایگاه داده: اسکریپت زیر را برای ایجاد پایگاه داده ی خود اجرا کنید.
USE MASTER GO
بررسی کنید که آیا پایگاه داده وجود دارد یا خیر. اگر پایگاه داده وجود دارد، آن را رها کرده و یک DB (پایگاه داده) جدید ایجاد کنید.
IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'InventoryDB' ) DROP DATABASE InventoryDB GO CREATE DATABASE InventoryDB GO USE InventoryDB GO
بعد از اجرای DB Script می توانیم مشاهده کنیم که پایگاه داده ایجاد شده و جداول هنوز ایجاد نشده اند.
مرحله ۲: ایجاد ASP.NET Core خود
پس از نصب ویژوال استودیو ۲۰۱۷ خود، Start را کلیک کرده، سپس Programs و Visual Studio 2017 را انتخاب کنید.
Visual Studio 2017 را کلیک کنید.
بر روی New کلیک کرده، سپس Project، Web را انتخاب و سپس ASP.NET Core Web Application را انتخاب کنید.
نام پروژه ی خود را وارد کرده و کلیک کنید:
Web Application Model View Controller را انتخاب کرده و بر روی Change Authentication کلیک کنید.
Individual User Accounts را انتخاب و ok را برای ایجاد پروژه ی خود کلیک کنید.
بروزرسانی appsettings.json
در فایل appsettings.json می توانیم رشته ی اتصال DefaultConnection را بیابیم.
اینجا در رشته ی اتصال SQL Server Name، UID و PWD خود را برای ایجاد و ذخیره ی تمامی جزئیات کاربر در یک پایگاه داده، تغییر دهید.
"ConnectionStrings": { "DefaultConnection": "Server= YOURSERVERNAME;Database=InventoryDB;user id= YOURSQLUSERID;password=YOURSQLPASSWORD;Trusted_Connection=True;MultipleActiveResultSets=true" },
مرحله ۳: افزودن Identity Server در فایل Startup.cs
بطور پیش فرض، در برنامه ی ASP.NET Core، Identity Service در فایل Startup.cs / متد ConfigureServices اضافه خواهد شد.
علاوه بر این می توانید قدرت رمز عبور را افزوده و نیز صفحه ی ورود / خروج پیش فرض و همچنین AccessDeniedPath را با استفاده از کد زیر تنظیم کنید.
services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); //Password Strength Setting services.Configure<IdentityOptions>(options => { // Password settings options.Password.RequireDigit = true; options.Password.RequiredLength = 8; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = true; options.Password.RequireLowercase = false; options.Password.RequiredUniqueChars = 6; // Lockout settings options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30); options.Lockout.MaxFailedAccessAttempts = 10; options.Lockout.AllowedForNewUsers = true; // User settings options.User.RequireUniqueEmail = true; }); //Seting the Account Login page services.ConfigureApplicationCookie(options => { // Cookie settings options.Cookie.HttpOnly = true; options.ExpireTimeSpan = TimeSpan.FromMinutes(30); options.LoginPath = "/Account/Login"; // If the LoginPath is not set here, ASP.NET Core will default to /Account/Login options.LogoutPath = "/Account/Logout"; // If the LogoutPath is not set here, ASP.NET Core will default to /Account/Logout options.AccessDeniedPath = "/Account/AccessDenied"; // If the AccessDeniedPath is not set here, ASP.NET Core will default to /Account/AccessDenied options.SlidingExpiration = true; });
در اینجا اینکه چگونه ASP.NET Core Identity Services را در متد ConfigureService خود اضافه کرده ایم، آمده است.
Role Management
مرحله ۴: ثبت و ایجاد اولین کاربر خود
حال، برنامه ی وب ASP.NET Core ما برای ثبت نام کاربران در وب سایت مان آماده است و همچنین کاربران می توانند پس از ثبت نام وارد سیستم ما شوند.
Authorization (تأیید) را از طریق افزودن نقش ها به کاربر در مراحل بعدی انجام خواهیم داد.
برنامه ی خود را برای ثبت اولین کاربر پیش فرض خود ساخته و اجرا کنید.
برای ثبت اولین User خود، بر روی لینک Register کلیک کنید.
Role Management
مهاجرت/انتقال (Migration)
هنگامی که بر روی دکمه ی Register کلیک می کنیم، می توانیم صفحه ی زیر را مشاهده کنیم.
از دیدن این صفحه وحشت نکنید چراکه برای نخستین بار که آن را اجرا می کنیم نیاز است Migration را انجام دهیم، تنها بر روی دکمه ی Apply Migrations کلیک کنید.
Role Management
می توانیم تأیید را بصورت Migration Applied ببینیم و سپس بر روی پیام Try refreshing the page کلیک کنید.
Role Management
صفحه را بازآوری (refresh) کرده و می توانیم ببینیم که کاربر به تازگی ثبت شده وارد وب سایت ما شده است.
بازآوری پایگاه داده
هنگامیکه پایگاه داده ی خود را بازآوری می کنیم، می توانیم ببینیم که تمامی جدول های Identity ایجاد شده اند.
Role Management
می توانیم جدول aspNetUsers را برای یافتن جزئیات کاربر ایجاد شده به تازگی، بررسی کنیم.
همچنین می توانیم ببینیم که ASPNetRoles و ASPNetUserRoles، از آنجاییکه هنوز هیچ نقشی ایجاد نکرده یا کاربری برای نقش ها اضافه نکرده ایم، هیچ رکوردی ندارند.
در مرحله ی بعدی، نقش جدیدی به عنوان “Admin” اضافه و کاربر تازه ثبت شده را به عنوان Admin اضافه خواهیم کرد.
Role Management
مرحله ۵: ایجاد نقش و تخصیص کاربر برای نقش
از متد زیر برای ایجاد یک Role جدید به عنوان “Admin” استفاده می کنیم و کاربر تازه ثبت شده را به عنوان “Admin” وب سایت خود تخصیص خواهیم داد.
فایل Startup.cs را باز کرده و این متد را در فایل Startup.cs خود اضافه کنید.
private async Task CreateUserRoles(IServiceProvider serviceProvider) { var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>(); var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>(); IdentityResult roleResult; //Adding Addmin Role var roleCheck = await RoleManager.RoleExistsAsync("Admin"); if (!roleCheck) { //create the roles and seed them to the database roleResult = await RoleManager.CreateAsync(new IdentityRole("Admin")); } //Assign Admin role to the main User here we have given our newly loregistered login id for Admin management ApplicationUser user = await UserManager.FindByEmailAsync("syedshanumcain@gmail.com"); var User = new ApplicationUser(); await UserManager.AddToRoleAsync(user, "Admin"); }
از فایل Startup.cs می توانیم متد Configure را بیابیم.
متد CreateUserRoles خود را از این متد Configure فراخوانی می کنیم.
هنگامیکه برنامه ی خود را ساخته و اجرا می کنیم، می توانیم ببینیم که Role جدیدی به عنوان “Admin” در جدول ASPNetRoles ایجاد خواهد شد.
Role Management
هنگامیکه برنامه ی خود را ساخته و اجرا می کنیم، می توانیم ببینیم که New Role در جدول ASPNetRoles اضافه شده و همچنین، می توانیم ببینیم که به User پیش فرضمان Admin Role اختصاص پیدا کرده است.
Role Management
مرحله ۶: ایجاد صفحه ی مدیر و تنظیم تأیید
حال، یک کاربر Admin برای برنامه ی وب ASP.NET Core خود داریم.
بیایید یک صفحه ی جدید ایجاد کرده و Authorization را برای این صفحه تنظیم کنیم، بطوریکه تنها کاربران LoggedIn و Admin بتوانند آن را مشاهده کنند.
برای انجام این کار، یک Controller جدید به نام Admin ایجاد خواهیم کرد.
ایجاد Admin Controller
بر روی پوشه ی Controller کلیک راست کرده و Add New Controller را کلیک، MVC Controller Empty را انتخاب و Add را کلیک کنید.
Role Management
نام Controller خود را بصورت Admin وارد کرده و Add را کلیک کنید.
از کنترل کننده بر روی Index کلیک راست کرده و Add View را کلیک کنید.
دکمه ی Add را برای ایجاد صفحه ی View خود کلیک کنید.
Role Management
می توانیم ببینیم که Admin Controller و Admin View ما ایجاد شده اند.
Role Management
صفحه ی Admin/Index.cshtml را جهت طراحی بر حسب نیاز خود باز کنید. در اینجا من متنی ساده مانند زیر افزوده ام.
Role Management
سپس، یک Menu جدید برای نمایش Admin Page ایجاد می کنیم.
برای ایجاد Menu جدید خود، Layout.cshtml را از پوشه ی Views/Shared باز کنید. منو را مانند تصویر زیر اضافه کنید.
اکنون Admin Page را ایجاد و همچنین منو را برای Admin خود اضافه کرده ایم.
این صفحه را تنها برای کاربر Admin ایجاد کرده ایم و دیگر کاربران و کاربران وارد نشده نباید این صفحه را ببینند.
می توانیم منوی جدیدی را ببینیم.
“Admin Page” ایجاد شده و اکنون برای همه باز است.
این یعنی هر فردی می تواند بر روی لینک کلیک کرده و محتویات آن صفحه را مشاهده کند.
Role Management
در اینجا می توانیم ببینیم که می توانیم صفحه ی Admin را با Login خود مشاهده کنیم:
تنظیم Authorization (تأیید)
جهت پرهیز از آن، Authorization را در کنترل کننده ی صفحه ی Admin خود بکار می بریم.
Admin Controller خود را باز کرده و خط کد زیر را اضافه کنید.
[Authorize(Roles = "Admin")] public IActionResult Index() { return View(); }
اگر برنامه مان را اجرا کنیم و بر روی صفحه ی Admin کلیک کنیم، بطور خودکار به صفحه ی Log in هدایت خواهد شد.
Role Management
توجه داشته باشید که تنها Admin Role Member ها (اعضای نقش مدیر) قادر به مشاهده ی صفحه ی مدیر هستند از آنجاییکه Authorization را تنها برای Admin Role ها تنظیم کرده ایم.
اگر می خواهید Role های بیشتری اضافه کنید، می توانید از یک ویرگول مانند کد زیر استفاده کنید.
[Authorization(Role = “Admin,SuperAdmin,Manager”)]مرحله ۷: نمایش پنهان سازی منو از طریق نقش کاربر
اکنون بیایید یک مرحله جلوتر برویم تا Main Menu را تنها برای کاربران Loggedin Admin نمایش دهیم.
برای انجام این کار، Layout.cshtml خود را از پوشه ی Views/Shared باز کرده و منوی تازه اضافه شده را مانند کد زیر تصحیح می کنیم.
اینجا در این کد، ابتدا بررسی می کنیم که آیا کاربر Authenticated (احراز هویت شده) است، که به معنای Loggedin است، و سپس بررسی می کنیم که آیا کاربر برای مشاهده ی منو Authorization (تأیید) دارد یا خیر.
<li> @if (User.Identity.IsAuthenticated) { @if (User.IsInRole("Admin")) { <a asp-area="" asp-controller="Admin" asp-action="Index">Admin Page</a> } } </li>
کد ما به اینصورت خواهد بود.
برنامه را اجرا کرده و می توانیم ببینیم که بطور پیش فرض “Admin Page” در منوی بالایی ما نمایش داده نخواهد شد.
تنها کاربر Loggedin Admin Role می تواند منو را مشاهده کند.
بیایید این را امتحان کرده و با کاربر Admin خود که در ابتدا ایجاد کردیم وارد سیستم شویم.
Role Management
پس از ورود به سیستم، می توانیم ببینیم که کاربر Admin اکنون می تواند منوی Admin Page را مشاهده کند.
حال، بیایید سعی کنیم یک کاربر عادی جهت ثبت ایجاد کنیم.
Role Management
پس از ثبت نام، می توانیم ببینیم که برای این کاربر نقش “Admin” را اضافه نکردیم و او هیچ دسترسی جهت مشاهده ی Admin Page ندارد.
Role Management
نتیجه گیری
نخست، یک نمونه پایگاه داده ی InventoryDB در SQL Server خود ایجاد کنید.
در فایل appsettings.json، رشته ی اتصال DefaultConnection را با SQL Server Connection های خود عوض کنید.
در فایل Startup.cs تمام کد را ، همانطور که در این مقاله بحث کردیم، اضافه کنید.
هیچ دیدگاهی نوشته نشده است.