آموزش برنامه نویسی در مشهد

شروع کار با ASP.NET Core 2.0 Identity و مدیریت نقش ها

آموزش asp.net

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

به طور خلاصه در این مطلب به موارد زیر اشاره خواهیم کرد:

ASP.net Identity این امکان را برای ما فراهم میکند تا توابع لاگین را به سیستم اضافه کنیم. در اینجا، ما برای نسخه ی آزمایشی کار از پایگاه داده SQL برای ذخیره ی جزئیات کاربران و اطلاعات موجود در پروفایل آنها استفاده می کنیم. از ASP.net Identity برای ثبت نام، ورود و نگهداری اطلاعات پروفایل کاربر استفاده می کنیم. اگر در مورد لاگین یا ورود صحبت می کنیم، بخش مهم کار این است که کاربر که وارد سیستم میشود مجاز است یا خیر و همچنین مشخص می کنیم که آیا برای دیدن صفحات مجاز است یا خیر.

اعتبارسنجی و اجازه دادن

احراز هویت یا اعتبارسنجی

معتبر بودن کاربر را چک میکند. در اینجا، سوال این است که چگونه چک کنیم که آیا کاربر معتبر است یا خیر. زمانیکه یک کاربر برای اولین دفعه وارد سایت میشود، باید ثبت نام کند. تمام اطلاعات آنها مانند نام کاربری، ایمیل و غیره در پایگاه داده ذخیره میشود. زمانیکه یک کاربر نام کاربری یا userid و رمز عبور خود را وارد میکند، این اطلاعات در پایگاه داده بررسی میشوند. اگر اطلاعات وارد شده مانند نام کاربری و رمز عبور موجود در پایگاه داده باشد، در این صورت کاربر معتبر بوده و به صفحه ی اصلی سایت هدایت میشود. در غیر این صورت، پیام لطفا نام کاربری و رمز عبور صحیح وارد کنید نمایش داده میشود. به تمام فرآیند بررسی معتبر بودن یا نبودن کاربر برای دسترسی به سایت اصطلاحا احراز هویت گفته میشود.

مجوز دادن

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

پیش نیازها

اطمینان حاصل کنید که تمام پیش نیازها را در سیستم کامپیوتر خود نصب کرده اید، در غیر این صورت آنها را دانلود و به ترتیب نصب کنید.

مرحله ۱: ایجاد پایگاه داده

ابتدا باید بتوانید پایگاه داده ی مورد نیاز را ایجاد نمایید و تنظیمات اتصال بین فایل appsettings.json را برای DefaultConnection با اتصال پایگاه داده جدیدمان انجام دهید. ما از این پایگاه داده برای ساختن جدول ASP.NET Core Identity استفاده خواهیم کرد.

ایجاد پایگاه داده: برای ایجاد پایگاه داده لازم است تا اسکریپت زیر را اجرا نمایید.

USE MASTER         
GO 

بررسی کنید که اگر پایگاه داده وجود داشت در این صورت آنرا حذف و مجدد یک پایگاه داده جدید ایجاد میکند.

IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'InventoryDB' )         
DROP DATABASE InventoryDB         
GO         
         
CREATE DATABASE InventoryDB         
GO         
         
USE InventoryDB         
GO 

بعد از اجرای اسکریپت DB ما می توانیم ببینیم که پایگاه داده ایجاد شده اما جداول آن هنوز ایجاد نشده اند.

مرحله ۲: ایجاد ASP.net core

بعد از نصب ویژوال استودیو ۲۰۱۷، روی start و سپس programs کلیک کنید و visual studio 2017 را انتخاب نمایید. روی new کلیک و سپس project را انتخاب و سپس ASP.net Core Web Application را انتخاب نمایید. نام پروژه را انتخاب کنید.

Web Application را در Model-View-Controller انتخاب و روی change Authentication کلیک کنید.

Individual User Accounts را انتخاب و بر روی ایجاد پروژه یا create your project کلیک نمایید.

appsettings.json را بروزرسانی کنید

در فایل apsettings.json ما می توانیم رشته ی DefaultConnection را پیدا کنیم. در اینجا رشته ی اتصال نام سرور sql، UID و PWD را برای ایجاد و ذخیره سازی تمام جزئیات در یک پایگاه داده تغییر میدهد.

"ConnectionStrings": {  
    "DefaultConnection": "Server= YOURSERVERNAME;Database=InventoryDB;user id= YOURSQLUSERID;password=YOURSQLPASSWORD;Trusted_Connection=True;MultipleActiveResultSets=true"  
  },  

مرحله ۳: اضافه کردن Identity Service در فایل Startup.cs

به صورت پیش فرض، در اپلیکیشن ASP.NET Core، سرویس Identify به فایل startup.cs و متد configureservices اضافه خواهد شد. علاوه براین، شما می توانید رشته ی رمز عبور را وارد کنید و صفحه ی ورود یا خروج پیش فرض را مشخص نمایید و AccessDenaiedPath را با استفاده از کد زیر مشخص کنید.

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 اضافه کرده ایم.

مرحله ۴: ثبت نام و ایجاد اولین کاربر

تا این قسمت از کار، برنامه ASP.net برای ثبت نام کاربران و همچنین ورود آنها به سیستم بعد از ثبت نام آماده می باشد. در گام های  بعد با اضافه کردن نقش ها به کاربر مجوزهای لازم را ارائه می کنیم. برنامه را بسازید و برای ثبت نام اولین کاربر پیش فرض مدیر آن را اجرا نمایید.

برای ثبت نام روی لینک ثبت نام کاربر کلیک کنید.

Migration

زمانیکه روی دکمه ی ثبت نام کلیک می کنید، صفحه ی زیر را مشاهده می نمایید. با مواجه شدن با این صفحه برای اولین بار اصلا نگران نباشید و فقط باید روی دکمه ی apply migration کلیک کنید.

در این مرحله میتوانید تایید را با عنوان migration applied مشاهده نمایید و سپس باید روی try refreshing کلیک کنید.

صفحه رفرش میشود و می توانیم کاربرانی که جدیدا ثبت نام کرده اند و وارد سایت شده اند را مشاهده کنیم.

تازه سازی پایگاه داده

زمانی که پایگاه داده را تازه سازی یا رفرش می کنیم، می توانیم تمام جداول Identity که ایجاد شده اند را ببینیم.

با چک کردن جدول aspNetUsers می توانیم جزئیات کاربرانی که به تازگی ثبت نام کرده اند را مشاهده کنیم. علاوه براین، همان طور که مشاهده می کنید در ASPNetRoles و ASPNetUserRoles هیچ رکوردی وجود ندارد، چون هنوز هیچ نقشی را تعریف نکرده ایم و کاربران به نقش خاصی اضافه نشده اند. در گام بعد یک نقش به عنوان admin را تعریف میکنیم و کاربر جدید را به عنوان Admin ثبت نام میکنیم.

احراز هویت در Asp Net Core

مرحله ۵: ایجاد نقش جدید و اختصاص دادن کاربر به نقش ها

با استفاده از متد زیر می توانیم یک نقش جدید به عنوان admin ایجاد کنیم و در نهایت، آخرین کاربر ثبت نام شده را به عنوان Admin به سایت معرفی می کنیم. فایل 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 می توانیم متد پیکربندی را پیدا کنیم. متد createuserroles را از این متد پیکربندی فراخوانی کنید. بعد از ساخت و اجرای برنامه، می توانیم نقش admin را در جدول ASONetRole مشاهده کنید.

بعد از ساخت و اجرای برنامه، می توانید new role را که به جدول ASPNetRole اضافه شده است ببینید. علاوه براین، مشاهده می کنید که کاربر پیش فرض با admin role مشخص شده است.

مرحله ۶: ایجاد صفحه Admin و تنظیم مجوزها

تا این مرحله ما یک نقش به عنوان Admin به برنامه ی ASP.net core اضافه کرده ایم. حال باید بتوانیم یک صفحه ی جدید ایجاد و مجوزهایی را برای این صفحه تنظیم کنیم، به طوریکه تنها کاربران لاگین شده و Admin بتوانند آن را مشاهده نمایند. برای این منظور لازم است تا یک کنترلر جدید به نام admin ایجاد کنیم.

ایجاد Admin Controller

روی پوشه ی controller راست کلیک کنید و به ترتیب روی add new controller کلیک و MVC Controller را انتخاب و روی Add کلیک کنید.

برای نام کنترلر Admin را وارد نمایید و روی Add کلیک کنید

در کنترلر روی index کلیک راست کنید و add view را کلیک نمایید. سپس روی دکمه ی add کلیک کنید تا صفحه ی جدید ایجاد شود.

در این مرحله مشاهده خواهید کرد که admin controller و Admin view ایجاد شده اند.

صفحه admin/index.cshtml را برای طراحی های مورد نیاز باز کنید. برای ایجاد منوی جدید، لازم است از پوشه ی view/shared فایل layout.cshtm را باز نمایید.

در این مرحله باید صفحه ی admin را ایجاد و منو را برای آن اضافه نمایید. ما این صفحه را تنها برای کاربر Admin ایجاد می کنیم و سایر کاربران نمی توانند آن را مشاهده کنند.

همان طور که مشاهده می کنید، منوی admin page ایجاد شده و برای تمام کاربران باز است. به عبارت دیگر، هر یک از کاربران که بر روی صفحه کلیک کنند، می توانند محتوای صفحه را مشاهده نمایند.

تنظیم کردن مجوزها

برای جلوگیری از چنین چیزی، لازم است تا از مجوزها در کنترلر صفحه ی Admin استفاده کنیم. Admin controller را باز و قطعه کد زیر را به آن اضافه نمایید.

[Authorize(Roles = "Admin")]  
public IActionResult Index()  
{  
    return View();  
} 

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

توجه داشته باشید که تنها اعضای نقش Admin قادر هستند تا وارد صفحه Admin شوند، چون تنها به آنها مجوز داده شده است. برای اینکه بتوانید به نقش های بیشتری مجوز بدهید، می توانید مانند قطعه کد زیر و با علامت کاما آنها را اضافه کنید.

[Authorize(Roles = “Admin,SuperAdmin,Manager”)]

 

مرحله ۷: نمایش و پنهان شدن منو با توجه به نقش کاربر

حال می خواهیم در این گام منوی ادمین را تنها به کاربرانی نمایش دهیم که به عنوان ادمین وارد سایت شده اند. برای این منظور باید از view/shared فایل layout.cshtml را باز کنیم و منوی تازه اضافه شده را مانند کد زیر ادیت کنیم. در این کد ابتدا بررسی میکنیم که چطور به کاربر مجوز داده شود، که به معنای ورود کاربر می باشد. سپس بررسی میکنیم که چه منوهایی را کاربر مجوز دارد ببیند.

<li>  
                   @if (User.Identity.IsAuthenticated)  
                   {  
                    @if (User.IsInRole("Admin"))  
                       {  
             <a asp-area="" asp-controller="Admin" asp-action="Index">Admin Page</a>  
                       }  
                    }  
               </li> 

با اجرای برنام مشاهده میکنید که به صورت پیش فرض admin page در منوی بالا نمایش داده نمیشود. تنها کاربرانی که با نقش admin وارد شده باشند می توانند آن را مشاهده کنند.

حال اگر با کاربر ادمین که به تازگی وارد شده است وارد شویم، می توانیم منوی Admin page را ببینیم.

همان طور که مشاهده می کنید، با ورود کاربران غیر ادمین چنین امکانی وجود نخواهد داشت.

نتیجه گیری

ابتدا، پایگاه داده به نام InventoryDB در sql server ایجاد کردیم. در فایل appsettings.json، رشته ی اتصال DefaultConnection را به اتصال SQL Server تغییر دادیم. درفایل  Startup.cs  کدهایی که در بالا به آنها اشاره شد اضافه کردیم.

آکادمی برنامه نویسان برگزار کننده دوره های تخصصی برنامه نویسی

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

 

خروج از نسخه موبایل