Thuộc tính Authorize trong ASP.NET Core

 9/5/2019 |  Admin   5262 lượt xem

(netcore.vn) - Thuộc tính Authorize trong ASP.NET Core

Trong chương này, chúng tôi sẽ thảo luận về Thuộc tính ủy quyền. Cho đến nay trong ứng dụng của chúng tôi, chúng tôi đã cho phép người dùng ẩn danh làm bất cứ điều gì. Họ có thể chỉnh sửa chi tiết nhân viên và xem chi tiết, nhưng chúng tôi không có chức năng tạo nhân viên mới. Trước tiên chúng ta hãy thêm tính năng tạo và sau đó chúng tôi sẽ hạn chế quyền truy cập của người dùng bằng thuộc tính Authorize.

Chúng ta cần bắt đầu bằng cách tạo một trang Chế độ xem MVC mới bên trong Chế độ xem → Thư mục chính và gọi nó là Tạo.cshtml và sau đó thêm mã sau đây.

@model Nhân viên
@ {
   ViewBag.Title = "Tạo";
}
<h1> Tạo </ h1>

@USE (Html.BeginForm ()) {
   <div>
      @ Html. Nhãn hiệu (m => m.Name)
      @ Html.EditorFor (m => m.Name)
      @ Html.ValidationMessageFor (m => m.Name)
   </ div>
   
   <div>
      <kiểu nhập = "gửi" value = "Lưu" />
   </ div>
}
Bây giờ chúng ta sẽ thêm phương thức hành động trong HomeContoder cho cả POST và GET như trong chương trình sau.

[HttpGet]
công khai ViewResult Tạo () {
   trả về Xem ();
}
[HttpPost]
công khai IActionResult Tạo (mô hình EmployeeEditViewModel) {
   if (ModelState.IsValid) {
      nhân viên var = Nhân viên mới ();
      nhân viên.Name = model.Name;
      var bối cảnh = new FirstAppDemoDbContext ();
      
      SQLEmployeeData sqlData = new SQLEmployeeData (bối cảnh);
      sqlData.Add (nhân viên);
      return RedirectToAction ("Chi tiết", mới {id = worker.Id});
   }
   trả về Xem ();
}
Hãy để chúng tôi thêm một liên kết để Tạo Chế độ xem trong tệp Index.cshtml như được hiển thị trong chương trình sau.

@model Trang chủPageViewModel
@ {
   ViewBag.Title = "Trang chủ";
}
<h1> Chào mừng! </ h1>

<bàn>
   @foreach (nhân viên var trong Model.Emprocod) {
   <tr>
      <td> @ staff.Name
         <td>
            <a asp-controller = "Home" asp-action = "Chi tiết"
               asp-routeid = "@ worker.Id"> Chi tiết </a>
            
            <a asp-controller = "Home" asp-action = "Chỉnh sửa"
               asp-routeid = "@ worker.Id"> Chỉnh sửa </a>
         </ td>
      </ tr>
   }
</ bàn>

<div>
   <a asp-action = "Create"> Tạo </a>
</ div>
Chạy ứng dụng; bạn sẽ thấy trang sau.

Tạo trang
Trên trang chủ, bạn sẽ thấy liên kết Tạo. Khi bạn nhấp vào liên kết Tạo, nó sẽ đưa bạn đến Chế độ xem Tạo.

Tạo đường link
Nhập tên vào trường Tên và nhấp vào nút Lưu.

Nhập tên Jimmy
Bây giờ bạn sẽ thấy chế độ xem chi tiết của nhân viên mới được thêm vào. Hãy để chúng tôi nhấp vào liên kết Trang chủ.

Trang chào
Trong ứng dụng này, mọi người dùng đều có thể tạo, chỉnh sửa nhân viên và mọi người đều có thể xem chế độ xem chi tiết. Chúng tôi muốn thay đổi hành vi này để trong tương lai, người dùng ẩn danh chỉ có thể nhìn thấy danh sách nhân viên trên trang chủ, nhưng mọi hành động khác đều yêu cầu người dùng tự xác định và đăng nhập. Chúng tôi có thể làm điều này với thuộc tính Authorize.

Bạn có thể đặt thuộc tính Authorize trên bộ điều khiển hoặc trên các hành động riêng lẻ bên trong bộ điều khiển.

[Ủy quyền]
lớp công khai HomeContoder: Trình điều khiển {
   // ....
}
Khi chúng ta đặt thuộc tính Authorize trên chính bộ điều khiển, thuộc tính ủy quyền áp dụng cho tất cả các hành động bên trong.

Khung MVC sẽ không cho phép yêu cầu đạt được một hành động được bảo vệ bởi thuộc tính này trừ khi người dùng vượt qua kiểm tra ủy quyền.

Theo mặc định, nếu bạn không sử dụng tham số nào khác, kiểm tra duy nhất thuộc tính Authorize sẽ thực hiện là kiểm tra để đảm bảo người dùng đăng nhập để chúng tôi biết danh tính của họ.

Nhưng bạn có thể sử dụng các tham số để chỉ định bất kỳ chính sách ủy quyền tùy chỉnh ưa thích nào mà bạn thích.

Ngoài ra còn có một thuộc tính AllowAnonymous. Thuộc tính này hữu ích khi bạn muốn sử dụng thuộc tính Authorize trên bộ điều khiển để bảo vệ tất cả các hành động bên trong, nhưng sau đó có một hành động này hoặc một hoặc hai hành động mà bạn muốn bảo vệ và cho phép người dùng ẩn danh tiếp cận hành động cụ thể đó.

[Cho phép vô danh]
Chỉ số ViewResult công khai () {
   mô hình var = new HomePageViewModel ();
   
   bằng cách sử dụng (var bối cảnh = new FirstAppDemoDbContext ()) {
      SQLEmployeeData sqlData = new SQLEmployeeData (bối cảnh);
      model.Emprocod = sqlData.Get ALL ();
   }
   Trả về Chế độ xem (mô hình);
}
Hãy để chúng tôi thử các thuộc tính này trong ứng dụng của chúng tôi. Trong ứng dụng đang chạy, một người dùng ẩn danh có thể chỉnh sửa một nhân viên.

Nhân viên chỉnh sửa
Chúng tôi muốn thay đổi điều này và buộc người dùng đăng nhập và nhận dạng chính họ trước khi họ có thể chỉnh sửa một nhân viên. Bây giờ chúng ta hãy đi vào HomeContoder. Chúng tôi sẽ hạn chế quyền truy cập vào một hoặc hai hành động ở đây. Chúng ta luôn có thể đặt thuộc tính Authorize trên những hành động cụ thể mà chúng ta muốn bảo vệ. Chúng ta cũng có thể đặt thuộc tính Authorize trên chính bộ điều khiển và thuộc tính Authorize này nằm trong không gian tên Microsoft.AspNet.Authorization.

Bây giờ chúng tôi sẽ sử dụng thuộc tính Authorize và buộc người dùng nhận dạng chính họ để vào bộ điều khiển này ngoại trừ trang chủ như trong chương trình sau.

[Ủy quyền]
lớp công khai HomeContoder: Trình điều khiển {
   [Cho phép vô danh]
   Chỉ số ViewResult công khai () {
      mô hình var = new HomePageViewModel ();
      sử dụng (var bối cảnh = FirstAppD mới

liên quan

Tìm hiểu tất tần tật về Model Validation trong ASP.NET Core  4160

 2/23/2020

HTTP 400 Responses có gì mới trong web APIs của ASP.NET Core

Xem chi tiết 

HTTP 400 Responses có gì mới trong web APIs của ASP.NET Core  2799

 2/23/2020

HTTP 400 Responses có gì mới trong web APIs của ASP.NET Core

Xem chi tiết 

ASP.NET Core - Đăng nhập và đăng xuất  20216

 9/5/2019

Sau đây, NET Core VN xin giới thiệu 2 chức năng đăng nhập và đăng xuất trong ASP.NET Core.

Xem chi tiết 

ASP.NET Core - CRUD cho User module  4932

 9/5/2019

Sau đây, NET Core VN xin giới thiệu CRUD thông tin User trong ASP.NET Core.

Xem chi tiết 

Identity Migrations trong ASP.NET Core  2990

 9/5/2019

Sau đây, .NET Core VN xin giới thiệu về chạy migration cho Identity trong ASP.NET Core.

Xem chi tiết 

Cấu hình Identity trong ASP.NET Core  4277

 9/5/2019

Cấu hình Identity trong ASP.NET Core

Xem chi tiết 

Tổng quan về Identity trong ASP.NET Core  5360

 9/5/2019

Tổng quan về Identity trong ASP.NET Core

Xem chi tiết 

ASP.NET Core - Razor Edit Form là gì?  2465

 9/5/2019

ASP.NET Core - Razor Edit Form là gì?

Xem chi tiết 

ASP.NET Core - Razor Tag Helpers là gì?  2563

 9/5/2019

ASP.NET Core - Razor Tag Helpers là gì?

Xem chi tiết 

ASP.NET Core - Razor View Import là gì?  3071

 9/5/2019

ASP.NET Core - Razor View Import là gì?

Xem chi tiết 
Like Fanpage Để Ủng Hộ Chúng Tôi Duy Trì Website