ما از متد ها و سرویس های Identity برای ثبت نام و احراز هویت کاربران استفاده کرده ایم. در مرحله بعد، نحوه کنترل مجوزها با استفاده از authorization را خواهیم دید. برای جلوگیری از دسترسی غیرمجاز به Controller ها و Action های MVC، میتوانیم به سادگی ویژگی درون برنامه ای Authorize را اضافه کنیم. این ویژگی را می توان به ازای هر Controller، هر Action یا به صورت سراسری اضافه کرد. با افزودن آن به Student Controller شروع می کنیم تا بتوانم دسترسی را فقط به کاربران تأیید شده محدود کنم.
namespace Tutorial.AspNetSecurity.RouxAcademy.Controllers
{
[Authorize]
public class StudentController : Controller
{
ما باید فضای نام Microsoft.AspNetCore.Authorization را برای استفاده از امکانات اعطای مجوز، در بالای صفحه اضافه کنیم. ما همچنین میتوانیم با افزودن ویژگی AllowAnonymous برخی از action ها را در دسترس عموم قرار دهیم.
بیایید ادامه دهیم و ویژگی AllowAnonymous را برای Action به نام Classifications قرار دهیم، زیرا این متد داده های غیر حساس و کم اهمیتی را برمی گرداند.
[HttpGet]
[AllowAnonymous]
public IActionResult Classifications()
{
برای اینکه کاربران بدانند چه زمانی از دسترسی آنها جلوگیری شده است، یک view به پوشه account اضافه می کنیم. پس ادامه دهید و در پوشه Views ، پوشه Account را باز کنید، و ما یک view به نام Access Denied اضافه می کنیم.
@{
ViewData["Title"] = "Access Denied";
Layout = "_ContentLayout";
}
<fieldset>
<header>
<h1 class="text-danger">Access Denied.</h1>
<p class="text-danger">You do not have access to this resource.</p>
</header>
</fieldset>
همچنین Account Controller را بهروزرسانی میکنیم تا اکشن Get را برای ویوی Access Denied (دسترسی ممنوع) اضافه کنیم.
بیایید جلوتر برویم و آن را در انتهای کنترلر اضافه کنیم. و ما آن را AccessDenied می نامیم و تنها کاری که انجام می دهد این است که ویو را برمی گرداند. میان افزار Identity دارای تنظیمات پیش فرض برای هدایت کاربران غیرمجاز به این View است.
[HttpGet]
public IActionResult AccessDenied()
{
return View();
}
حالا بیایید برنامه خود را اجرا کنیم، و کاری که انجام خواهیم داد این است که مستقیماً به صفحه اصلی و اول دانشجو/دانش آموز یعنی آدرس /Student/Index برویم. تلاش ما برای دیدن این صفحه نتیجه نمی دهد و ما به صفحه Login (ورود) هدایت می شویم.
افزودن فیلتر Authorize تضمین می کند که فقط کاربرانی که وارد سیستم شده اند مجاز هستند آن صفحه را ببینند .
اگر به ویو ی Classifications در کنترلر Student برویم، میتوانیم این کار را با مراجعه به آدرس Student/Classifications انجام دهیم، میبینیم که میتوانیم همه چیز را روی صفحه مشاهده کنیم، زیرا ویژگی Authorized برای این Action را نداریم و ما ویژگی AllowAnonymous را برای این متد اضافه کرده بودیم. این سادهترین شکل سنجش مجوز است که فقط وضعیت احراز هویت را بررسی میکند، اما این کار همیشه کافی نیست. اجازه دهید با استفاده از مشخصات ورود به سیستم(شناسه کاربری و رمز عبور)ی که قبلا اضافه کردیم وارد پورتال دانشجویی شویم. می توانید ببینید که در صفحه اصلی دانش آموز، لینکی برای اضافه کردن نمره وجود دارد. من میتوانم بعد از ورود به سایت به عنوان دانشآموز برای خودم نمرههایی اضافه کنم که نباید اجازه این کار داده شود. ما باید دسترسی بیشتری را اعمال کنیم و دسترسی را بر اساس عوامل دیگر محدود کنیم.