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

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

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

  • ایجاد کاربران مدیر پیش فرض
  • ایجاد نقش مدیر پیش فرض
  • تغییر مسیر کاربران غیر مجاز به صفحه ی ورود به سیستم
  • نمایش منوی صفحه ی مدیر تنها برای کاربران مدیر مجاز

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

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

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

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

مجوز دادن

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

پیش نیازها

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

  • ابتدا باید ویژوال استودیو ۲۰۱۷ را دانلود و نصب نمایید
  • SQL Server 2014 یا بالاتر
  • استفاده از کدهای مورد نیاز

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

ابتدا باید بتوانید پایگاه داده ی مورد نیاز را ایجاد نمایید و تنظیمات اتصال بین فایل 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

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

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

asp net core

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

آموزش asp.net

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

asp net core آموزش

آموزش asp.net

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

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

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

 آموزش asp net core

مرحله ۳: اضافه کردن 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

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

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

آموزش asp.net

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

آموزش asp.net mvc

Migration

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

آموزش asp.net

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

آموزش asp.net

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

آموزش asp.net

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

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

آموزش asp.net

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

آموزش asp.net

احراز هویت در 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 مشاهده کنید.

آموزش asp.net

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

آموزش asp.net

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

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

ایجاد Admin Controller

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

آموزش asp.net

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

آموزش asp.net

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

آموزش asp.net

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

آموزش asp.net

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

آموزش asp.net

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

آموزش asp.net

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

آموزش asp.net

آموزش asp.net

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

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

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

آموزش asp.net

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

آموزش asp.net

توجه داشته باشید که تنها اعضای نقش 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> 

آموزش asp.net

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

آموزش asp.net

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

آموزش asp.net

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

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

نتیجه گیری

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

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

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

 

ورکشاپ رایگان دوره های تخصصی برنامه نویسی

شما این فرصت را دارید، با تکمیل فرم زیر، قبل از انتخاب دوره آموزشی مناسب خود، در ورکشاپ رایگان دوره های تخصصی برنامه نویسی شرکت کنید
  • این فیلد برای اعتبار سنجی است و باید بدون تغییر باقی بماند .

درباره‌ی زعیم باشی

فاطمه زعیم باشی؛ کارشناس ارشد نرم افزار، نویسنده، مترجم و علاقه مند به برنامه نویسی

همچنین ببینید

ASPCore

آموزش ASP.NET Core MVC و ویژوال استودیو

در این سری آموزش ها به نحوه ساخت یک پروژه در ASP.NET Core MVC 2 …

3 نظر

  1. ممنون از توضیحات کاملتون

  2. خیییلی عالی بوود.ممنون

  3. سلام این اهراز هویت که پیاده سازی کردید و از یمپل خود ویژوال استفاده کردید مشکلی نداره امنه ؟ نیاز به تغییری نداره ؟ میشه در پروژه واقعی ازش استفاده کرد؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *