Pada tutorial kali ini, kita akan membuat fitur untuk melakukan manajemen user. Fitur ini hanya bisa dilakukan oleh user yang mempunyai role sebagai admin.
Role admin dapat menambahkan user baru, modifikasi informasi user, menghapus user dari sistem, serta akses ke halaman-halaman UserManagement.
Status Info
Pertama, kita copy terlebih dahulu file _StatusMessage.cshtml pada folder /Areas/Identity/Pages/Account/Manage/_StatusMessage.cshtml ke /Pages/Shared
agar bisa kita gunakan pada fitur UserManagement.
Index Page
Kita lanjutkan dengan melakukan edit pada Index.cshtml dan Index.cshtml.cs. Kita ubah Index.cshtml agar bisa menampilkan list dari user beserta fitur untuk manajemen user.
Pada halaman ini, kita menambahkan daftar user yang ada di aplikasi beserta empat link untuk melakukan penambahan user, melihat detail user, melakukan perubahan data pada user,
dan menghapus user. Daftar user akan menampilkan ID dan email seluruh user. Terdapat juga StatusMessage sebagai partial view yang berfungsi untuk menampilkan
status ketika melakukan penambahan atau menghapus data.
Kemudian buka file Index.cshtml.cs dan ubah kodenya menjadi seperti ini.
Index.cshtml.cs merupakan bagian dimana informasi seluruh user didapatkan. Kemudian file ini akan mengirimkan data tersebut kepada Index.cshtml.
[Authorize(Roles = "Admin")] ditambahkan agar rute yang ada di file ini hanya bisa diakses oleh user yang mempunyai role sebagai admin.
public new IList<IdentityUser> User { get; set; } = default!; merupakan tempat untuk menyimpan seluruh informasi user. Nantinya, properti ini akan diupdate
saat _userManager.Users.ToList(); dipanggil untuk menampilkan informasi seluruh user.
Ketika teman-teman menjalankan aplikasi ini menggunakan dotnet watch atau dotnet run serta login sebagai admin, maka teman-teman akan melihat tampilan berikut.
Tampilan berikut menampilkan seluruh user yang sudah melakukan registrasi pada aplikasi ini.
User Detail
Selanjutnya, mari kita buat fitur User Detail. Ketika admin user melakukan klik pada tautan detail, maka akan ditampilkan detail dari user.
Buka file Detail.cshtml dan tambahkan kode berikut.
Rute User Detail ini akan menampilkan informasi user berupa Id dan Email. Nantinya teman-teman bisa menambahkan informasi
apabia diperlukan contohnya seperti nama atau profile picture.
Kemudian edit Detail.cshtml.cs agar bisa memberikan informasi user sesuai dengan ID user.
_userManager.FindByIdAsync(id); merupakan API yang bisa kita gunakan untuk menampilkan informasi user berdasarkan ID user.
Data user akan disimpan pada property user agar bisa ditampilkan oleh Detail.cshtml.
Tampilan halaman user detail akan menjadi seperti ini.
Edit User
Setelah membuat fitur mengenai daftar user dan user detail, mari kita buat untuk edit informasi user.
Fitur edit user ini juga hanya bisa dilakukan oleh user yang mempunyai role admin.
Buka file Edit.cshtml dan kita tampilkan detail user serta opsi untuk mengubah role.
Selanjutnya, buka file Edit.cshtml.cs dan tambahkan kode berikut.
Method OnGetAsync akan menampilkan data user yang akan kita edit. Kemudian apabila kita mengubah role user, maka OnPostAsync
akan memproses perubahan data tersebut. Pertama, user akan dicek apakah user memang valid. Apabila valid, kemudian akan dilanjutkan
dengan menghapus role user ini (_userManager.RemoveFromRoleAsync) dan menambahkan role baru (_userManager.AddToRoleAsync).
Kemudian, apabila user yang sedang login melakukan perubahan role terhadap informasinya sendiri, maka user tersebut akan logout.
Contoh skenario ini yaitu ketika user dengan role admin mengganti role menjadi user saat sedang login. Proses pengecekan ini terjadi
pada method OnPostAsync yaitu di bagian ini.
Pada StatusMessage, kita menambahkan informasi bahwa operasi edit ini telah berhasil dan akan ditampilkan oleh view pada frontend.
Berikut tampilan halaman Edit dengan opsi untuk mengubah role user dan informasi mengenai role user.
Delete User
Fitur selanjutnya untuk UserManagement adalah fitur untuk menghapus user. Pada proses menghapus user, kita akan
membuat delete.cshtml menjadi halaman konfirmasi untuk melakukan delete. Setelah proses ini selesai, user akan kita
arahkan kembali ke halaman list seluruh user.
Edit file delete.cshtml dengan memasukkan kode berikut.
File ini menampilkan informasi user yang akan dihapus serta tombol Delete sebagai trigger untuk menghapus data user.
Ketika user klik tombol Delete, maka akan ada proses HTTP Post ke delete.cshtml.cs.
Selanjutnya kita buka delete.cshtml.cs dan tambahkan kode berikut agar bisa mengolah data dari frontend.
Method OnGetAsync akan mengirimkan data mengenai user yang akan dihapus. Lalu, method OnPostAsync akan melakukan
penghapusan data user dan akan melakukan redirect ke halaman list user. _userManager.DeleteAsync(user); merupakan bagian
dimana data user dihapus dari aplikasi ini.
User yang login dan mempunyai role sebagai admin hanya bisa menghapus datanya dari halaman pada URL /Identity/Account/Manage/PersonalData.
Proses cek dilakukan dengan membandingkan user yang login dengan info user yang ingin dihapus menggunakan
informasi ViewData["authenticatedUserId"]. User yang sedang login dengan role admin akan diarahkan untuk mengunjungi halaman
/Identity/Account/Manage/PersonalData.
Apabila user yang login berbeda dengan user yang ingin dihapus, maka akan terlihat tombol Delete seperti ini.
Create User
Fitur terakhir yang kita buat yaitu fitur untuk menambahkan user baru. Buka file Create.cshtml dan ubah menjadi seperti berikut.
Create.cshtml akan menampilkan form untuk membuat user baru. Admin bisa menambahkan user baru dengan menambahkan email dari user baru.
Email untuk user baru harus unik sehingga user satu dengan yang lain tidak akan memiliki email yang sama.
Selanjutnya, edit file Create.cshtml.cs dan tambahkan kode berikut.
User yang ditambahkan nanti akan mempunyai default Password yaitu DevK@ge0nline dan role User. Method OnPostAsync() akan menerima
data berupa email user baru dari frontend dan melakukan proses pembuatan user melalui _userManager.CreateAsync. GetEmailStore() akan kita gunakan nanti
untuk mengirimkan konfirmasi email kepada user baru.
Nah, saat ini aplikasi boilerplate ini sudah mempunyai user management yang hanya bisa diakses oleh user dengan role admin.
Fitur ini merupakan penerapan konsep authorization dengan menggunakan informasi role. Teman-teman bisa menambahkan role lain
dengan akses yang berbeda sesuai dengan kebutuhan aplikasi nantinya.
Pada bagian selanjutnya, kita akan menambahkan fitur file upload dan email notification untuk aplikasi ini sehingga aplikasi
boilerplate ini menjadi lebih banyak fitur sebagai dasar pembuatan aplikasi-aplikasi lain nantinya.