Authorization adalah proses untuk melakukan cek hak akses user untuk menentukan apakah user bisa mengakses bagian-bagian yang ada pada aplikasi.
Contoh yang sering biasanya teman-teman temui adalah user yang mempunyai role seperi Admin dan User.
Kedua role ini memiliki akses yang berbeda. Lazimnya, role Admin mempunyai hak akses yang lebih tinggi daripada role User, misalnya menambahkan atau menghapus user.
Pada tutorial ini, kita menambahkan proses authorization kepada user pada boilerplate.
Kemudian kita akan melakukan cek kepada user dengan dua role yaitu Admin dan User.
Boilerplate: Authorization
Pertama, kita buat terlebih dahulu fitur untuk mengelola seluruh user yang ada di aplikasi ini yaitu UserManagement dengan role Admin dan User.
User dengan role Admin mempunyai akses untuk menambah, menghapus, atau memodifikasi data-data seluruh user di aplikasi serta akses ke halaman-halaman UserManagement,
sedangkan role User hanya bisa mengakses data user tersebut
tanpa bisa mengakses data user lain dan tidak bisa melihat halaman-halaman UserManagement.
Langkah selanjutnya adalah membuat halaman-halaman UserManagement.
Buat folder Pages/UserManagement
kemudian buat file-file ini di dalam folder baru tersebut.
Create.cshtml
Create.cshtml.cs
Delete.cshtml
Delete.cshtml.cs
Details.cshtml
Details.cshtml.cs
Edit.cshtml.cs
Edit.cshtml.cs
Index.cshtml
Index.cshtml.cs
Kita akan gunakan Index.cshtml dan Index.cshtml.cs untuk rute UserManagement sedangkan halaman-halaman
lain akan kita update nanti. Buka Index.cshtml.cs dan tambahkan kode berikut.
File ini merupakan Page Model yang digunakan pada Index.cshtml. Authorization user dengan
role Admin sudah ditambahkan sehingga UserManagementModel hanya bisa diakses oleh user dengan
role Admin. User dengan role lain akan gagal untuk mengakses halaman ini.
Selanjutnya, tambahkan kode ini pada file Index.cshtml.
File ini akan ditampilkan di frontend.
Setelah itu, buka Program.cs dan tambahkan role services AddRoles<IdentityUser>().
Langkah selanjutnya adalah membuat seed pada database kita untuk menambahkan default user dengan role Admin.
Buat file SeedData.cs di folder Data dan update file menjadi seperti ini.
File ini berfungsi untuk membuat role Admin dan User serta satu user dengan role Admin
yaitu [email protected] pada database. Role dan user dibuat dengan menggunakan beberapa class
dari Microsoft.AspNetCore.Identity seperti IdentityRole dan IdentityUser.
Apabila user yang akan dibuat serta role belum eksis, maka seed akan dibuat berdasarkan informasi
yang ada di file ini.
Okay mari kita jalankan aplikasi ini untuk tes fungsi Authorization yang ada. Jalankan dengan perintah
dotnet run. Selanjutnya login dengan email [email protected] dan password Admin@123.
Setelah itu, teman-teman bisa mengunjungi rute UserManagement dan akan melihat tampilan pada halaman
UserManagement sesuai file Pages/UserManagement/Index.cshtml.
Kemudian teman-teman bisa mencoba register user baru dan juga melakukan klik pada tautan confirm email. User ini nantinya
secara default memang tidak akan memiliki role Admin. Lalu teman-teman bisa mengunjungi rute UserManagement lagi. Maka akan ada informasi
Access Denied. Hal ini sesuai dengan skenario Authorization yang kita buat tadi.
Selanjutnya, kita perlu memodifikasi proses registrasi user. Proses registrasi user saat ini tidak dilengkapi dengan penambahan
informasi role pada user. Skenario ini harus kita ubah seperti berikut agar aplikasi web ini lebih aman.
Ketika registrasi, default role untuk user adalah User.
Hanya admin yang bisa mengubah role dari tiap user, misalnya mengubah role dari User menjadi Admin.
Buka file Areas/Identity/Pages/Account/Register.cshtml.cs. Kita tambahkan AddToRoleAsync dengan role User saat
pembuatan user di proses registrasi pada method OnPostAsync sehingga menjadi seperti berikut.
Setelah mengubah file ini, user akan mempunyai role User pada proses registrasi.
Langkah selanjutnya adalah membuat menu User Management di navbar yang hanya muncul oleh user dengan role Admin.
Buka file Pages/Shared/_Layout.cshtml dan tambahkan menu UserManagement.
Kemudian jalankan aplikasi web kembali. Ketika teman-teman login melalui user dengan role Admin maka akan terlihat
menu User Management di navbar. User dengan role selain Admin tidak akan bisa melihat menu ini.
Proses authorization sudah berjalan dengan baik pada boilerplate ini. Kawan-kawan bisa menambahkan role lain sesuai dengan kebutuhan
aplikasi yang dibuat.
Pada bagian selanjutnya, kita akan menambahkan fitur user management untuk aplikasi ini.