شروع کار با ASP.NET Core Identity و Role Management

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 (حساب ها) هدایت شود.

پیش نیازها

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

  1.  ابتدا Visual Studio 2017 را از این لینک دانلود و نصب کنید
  2.  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 می توانیم مشاهده کنیم که پایگاه داده ایجاد شده و جداول هنوز ایجاد نشده اند.

Role Management

مرحله ۲: ایجاد ASP.NET Core خود

پس از نصب ویژوال استودیو ۲۰۱۷ خود، Start را کلیک کرده، سپس Programs و Visual Studio 2017 را انتخاب کنید.

Visual Studio 2017 را کلیک کنید.

بر روی New کلیک کرده، سپس Project، Web را انتخاب و سپس ASP.NET Core Web Application را انتخاب کنید.

نام پروژه ی خود را وارد کرده و کلیک کنید:

Role Management

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

Role Management

Individual User Accounts را انتخاب و ok را برای ایجاد پروژه ی خود کلیک کنید.

Role Management

Role Management

بروزرسانی 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"  
  },  

Role Management

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

Role Management

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

حال، برنامه ی وب ASP.NET Core ما برای ثبت نام کاربران در وب سایت مان آماده است و همچنین کاربران می توانند پس از ثبت نام وارد سیستم ما شوند.

Authorization (تأیید) را از طریق افزودن نقش ها به کاربر در مراحل بعدی انجام خواهیم داد.

برنامه ی خود را برای ثبت اولین کاربر  پیش فرض خود ساخته و اجرا کنید.

Role Management

برای ثبت اولین User خود، بر روی لینک Register کلیک کنید.

Role Management

Role Management

مهاجرت/انتقال (Migration)

هنگامی که بر روی دکمه ی Register کلیک می کنیم، می توانیم صفحه ی زیر را مشاهده کنیم.

از دیدن این صفحه وحشت نکنید چراکه برای نخستین بار که آن را اجرا می کنیم نیاز است Migration را انجام دهیم، تنها بر روی دکمه ی Apply Migrations کلیک کنید.

Role Management

Role Management

می توانیم تأیید را بصورت Migration Applied ببینیم و سپس بر روی پیام Try refreshing the page کلیک کنید.

Role Management

Role Management

صفحه را بازآوری (refresh) کرده و می توانیم ببینیم که کاربر به تازگی ثبت شده وارد وب سایت ما شده است.

Role Management

بازآوری پایگاه داده

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

Role Management

Role Management

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

همچنین می توانیم ببینیم که ASPNetRoles و ASPNetUserRoles، از آنجاییکه هنوز هیچ نقشی ایجاد نکرده یا کاربری برای نقش ها اضافه نکرده ایم، هیچ رکوردی ندارند.

در مرحله ی بعدی، نقش جدیدی به عنوان “Admin” اضافه و کاربر تازه ثبت شده را به عنوان Admin اضافه خواهیم کرد.

Role Management

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

Role Management

هنگامیکه برنامه ی خود را ساخته و اجرا می کنیم، می توانیم ببینیم که New Role در جدول ASPNetRoles اضافه شده و همچنین، می توانیم ببینیم که به User پیش فرضمان Admin Role اختصاص پیدا کرده است.

Role Management

Role Management

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

حال، یک کاربر Admin برای برنامه ی وب ASP.NET Core خود داریم.

بیایید یک صفحه ی جدید ایجاد کرده و Authorization را برای این صفحه تنظیم کنیم، بطوریکه تنها کاربران LoggedIn و Admin بتوانند آن را مشاهده کنند.

برای انجام این کار، یک Controller جدید به نام Admin ایجاد خواهیم کرد.

ایجاد Admin Controller

بر روی پوشه ی Controller کلیک راست کرده و Add New Controller را کلیک، MVC Controller Empty را انتخاب و Add را کلیک کنید.

Role Management

Role Management

نام Controller خود را بصورت Admin وارد کرده و Add را کلیک کنید.

Role Management

از کنترل کننده بر روی Index کلیک راست کرده و Add View را کلیک کنید.

دکمه ی Add را برای ایجاد صفحه ی View خود کلیک کنید.

Role Management

Role Management

می توانیم ببینیم که Admin Controller و Admin View ما ایجاد شده اند.

Role Management

Role Management

صفحه ی Admin/Index.cshtml را جهت طراحی بر حسب نیاز خود باز کنید. در اینجا من متنی ساده مانند زیر افزوده ام.

Role Management

Role Management

سپس، یک Menu جدید برای نمایش Admin Page ایجاد می کنیم.

برای ایجاد Menu جدید خود، Layout.cshtml را از پوشه ی Views/Shared باز کنید. منو را مانند تصویر زیر اضافه کنید.

Role Management

اکنون Admin Page را ایجاد و همچنین منو را برای Admin خود اضافه کرده ایم.

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

می توانیم منوی جدیدی را ببینیم.

“Admin Page” ایجاد شده و اکنون برای همه باز است.

این یعنی هر فردی می تواند بر روی لینک کلیک کرده و محتویات آن صفحه را مشاهده کند.

Role Management

Role Management

در اینجا می توانیم ببینیم که می توانیم صفحه ی Admin را با Login خود مشاهده کنیم:

Role Management

تنظیم Authorization (تأیید)

جهت پرهیز از آن، Authorization را در کنترل کننده ی صفحه ی Admin خود بکار می بریم.

Admin Controller خود را باز کرده و خط کد زیر را اضافه کنید.

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

Role Management

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

Role Management

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>

  

کد ما به اینصورت خواهد بود.

Role Management

برنامه را اجرا کرده و می توانیم ببینیم که بطور پیش فرض “Admin Page” در منوی بالایی ما نمایش داده نخواهد شد.

تنها کاربر Loggedin Admin Role می تواند منو را مشاهده کند.

Role Management

بیایید این را امتحان کرده و با کاربر Admin خود که در ابتدا ایجاد کردیم وارد سیستم شویم.

Role Management

Role Management

پس از ورود به سیستم، می توانیم ببینیم که کاربر Admin اکنون می تواند منوی Admin Page را مشاهده کند.

Role Management

حال، بیایید سعی کنیم یک کاربر عادی جهت ثبت ایجاد کنیم.

Role Management

Role Management

پس از ثبت نام، می توانیم ببینیم که برای این کاربر نقش “Admin” را اضافه نکردیم و او هیچ دسترسی جهت مشاهده ی Admin Page ندارد.

Role Management

Role Management

نتیجه گیری

نخست، یک نمونه پایگاه داده ی InventoryDB در SQL Server خود ایجاد کنید.

در فایل appsettings.json، رشته ی اتصال DefaultConnection را با SQL Server Connection های خود عوض کنید.

در فایل Startup.cs تمام کد را ، همانطور که در این مقاله بحث کردیم، اضافه کنید.

زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

ما یک پرسشنامه‌ی کوچولو داریم، که قول میدیم وقتتون رو خیلی نمی‌گیره، ولی کلی به ما کمک می‌کنه، چون هم assessment مونه ,و هم شما به ما در این زمینه کمک میکنید.بزن بریم