Di dalam filter Asp.Net MVC 4 lisensi

Dalam posting terakhir, saya melihat bagaimana kita bisa melihat ke dalam 4 kode sumber MVC. Aku akan kita lihat apa yang terjadi di posting ini, jika Anda menggunakan filter default Membiarkan aplikasi secara default MVC 4 Internet.

Apa filter sih?

4 MVC Asp.Net kita menyaring menambahkan declaritively beberapa pengolahan logika aplikasi hanyalah sebuah metode dekorasi atribut aksi yang mengimplementasikan antarmuka berikut.

  • IAuthorizationFilter
  • IActionFilter
  • IResultFilter
  • IExceptionFilter

Dalam hal ini, Saya tertarik IAuthorizationFilter yang bekerja sebelum metode tindakan, yang digunakan, serta semua modus lain dari aksi filter yang digunakan.

Cara kerjanya

Default pelaksanaan IAuthorizationFilter yang datang dipanggang dalam MVC 4 dan siap untuk digunakan AuthorizeAttribute. Apa yang dapat diterapkan pada “Tentang” metode tindakan adalah MVC app HomeController.cs Internet Asp.Net 4 sebagai default.

 [Allow] public ActionResult Tentang () {ViewBag.Message = & amp; amp; quot; Halaman aplikasi dari deskripsi. ;; & Amp; Amp; quot kembali Lihat (); } 

Ini akan memeriksa dalam konteks MVC dalam penentuan sebelum metode pelaksanaan kontak, jika semua atribut untuk membuat setiap empat antarmuka yang tercantum di atas Mereka bertanya. Kerangka yang akan melihat AuthorizeAttribute IAuthorizationFilter AuthorizeCore akan mengeksekusi metode.

Pada contoh di atas Kapasitas kata berhenti ketika metode dekorasi. Jika atribut sebagai AuthorizeAttribute berakhir dari "kapasitas" MVC cukup pintar untuk memungkinkan kita untuk menerapkannya bahkan di [Allow] atau [AuthorizeAttribute].

Pada titik ini, jika kita mulai untuk mengatur default Asp.Net MVC 4 app. dan klik tombol Make sumbangan tanpa mendaftar, Anda dapat memasukkan dan mengakui bahwa kita belum dikonfirmasi dan kami diarahkan ke halaman login.

Jika Anda telah mendaftar dan mengklik link di sekitar, Anda akan diakui dan divalidasi metode ini diterapkan di kartu.

Bagaimana untuk membatasi akses ke pengguna tertentu dan peran?

Saat ini, hanya sebuah metode untuk membatasi akses ke dikonfirmasi pengguna saja, maka [Otorisasi] atribut. Untuk membatasi akses ke hanya beberapa anggota dapat mengubah berikut

 [Authorize (Pengguna = & amp; amp; quot; Joe, Mary & amp; amp ; quot;)] public ActionResult Tentang () {ViewBag.Message = & amp; amp; quot; Halaman aplikasi dari deskripsi. ;; & Amp; Amp; quot kembali Lihat (); } 

Untuk membatasi akses ke hanya para pengguna yang merupakan anggota dari peran tertentu dalam perubahan ini.

 [Authorize (Roles = & amp; amp; quot; Admin, Manager & amp; amp; quot;)] public ActionResult Tentang () {ViewBag.Message = & amp; amp; quot; Halaman aplikasi dari deskripsi. ;; & Amp; Amp; quot kembali Lihat (); } 

Ketika menentukan pengguna dan peran harus dipenuhi kedua kriteria. Sementara Joe atau Mary dapat mengakses halaman Tentang, dan hanya jika mereka adalah anggota atau peran manajer atau administrator.

 [Authorize (Pengguna = & amp; amp; quot; Joe, Mary & amp; amp; quot ;, Peran = & amp; amp; quot; Admin, Manajer & amp; amp; quot;] ActionResult publik () {ViewBag.Message = & amp; amp; quot ;. deskripsi dari halaman aplikasi & amp; amp; quot ;; kembali Lihat ();} 

Apa yang terjadi di balik layar ?

Untuk melihat ini MVC lakukan bagi kita di belakang layar kita menciptakan kemampuan kita sendiri untuk mewarisi AuthorizeAttribute default. Untuk melakukan ini, klik kanan folder Visual Studio Filter dan klik "Add" dan "kelas" dan nama AuthTestAttribute.cs kelas baru.

kelas baru mewarisi system.web yang .Mvc.AuthorizeAttribute menimpa metode AuthorizeCore () karena

 MvcApplication1.Filters namespace {public TestAuthAttribute kelas:. {protected override void AuthorizeCore System.Web.Mvc.AuthorizeAttribute (HttpContextBase HttpContext) {kembali base.AuthorizeCore (HttpContext); }}} 

Sekarang tambahkan breakpoint pada baris yang memanggil metode base.AuthorizeCore. Kembali ke metode yang HomeController.cs tindakan yang diambil dan mengatakan bahwa atribut yang baru saja dibuat.

 [MvcApplication1.Filters.TestAuth] public ActionResult Tentang () {ViewBag.Message = & amp; amp; quot; Halaman aplikasi dari deskripsi. ;; & Amp; Amp; quot kembali Lihat (); } 

Sekarang, jika kita tekan F5 untuk debug dan klik pada link kontak harus memukul titik istirahat. Hit F11 langkah dan kami akan melihat, usus, metode standar AuthorizeCore AuthorizeAttribute sini.

 dilindungi virtual void AuthorizeCore (HttpContextBase HttpContext) {if (HttpContext == null) {melemparkan ArgumentNullException baru (& amp; amp; quot; HttpContext & amp; amp ; quot;); } IPrincipal user = HttpContext.User; jika {return false (user.Identity.IsAuthenticated!); } Jika (_usersSplit.Length & amp; amp; gt; 0 & amp; amp; amp; & amp; amp; amp;! _usersSplit.Contains (User.Identity.Name, StringComparer.OrdinalIgnoreCase)) {return false; } Jika (_rolesSplit.Length & amp; amp; gt; 0 & amp; amp; amp; & amp; amp; amp;! _rolesSplit.Any (User.IsInRole)) {return false; } Kembali benar; } 

Metode AuthorizeCore sangat sederhana. Ini berjalan pada sepasang cek, yang didasarkan pada objek ditransfer yang mengimplementasikan System.Web.HttpContextBase pengguna yang adalah properti yang mengembalikan sebuah objek yang mengimplementasikan System.Security.Principal.IPrincipal antarmuka.

Jika Anda AuthorizeCore mengembalikan true, metode ini diizinkan untuk mengeksekusi ketika mengembalikan false, itu tidak.

Jika informasi pengguna berasal?

Tiga metode yang menarik di tubuh AuthorizeCore adalah

  • IPrincipal.Identity.IsAuthenticated
  • IPrincipal.Identity.Name
  • IPrincipal.IsInRole

Semua metode ini dalam belakang layar dan bagaimana kita dapat menghubungkan mereka ke daftar pengguna yang ada dan peran akan menjadi subjek dari posting berikutnya.



Tags: , , ,