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