Melengkapi asp.net Core MVC tutorial series: part-1, part-2 dan tulisan ini sebagai part-3.
EntityFrameworkCore
Untuk mengakses database, asp.net core secara default menggunakan EntityFrameworkCore dan Sql Server. EntityFrameworkCore adalah data access technology, ini adalah versi ringan dan cross platform dari EntityFramework. Ada dua cara untuk menggunakan entityframework:
Code first
Database first
Tutorial ini menggunakan code first, dimana developer akan membuat class POCO yang menggambarkan relasi antar tabel, struktur tabel beserta kolom-kolomnya. Setelah itu menggunakan entityframework migration dan dotnet cli untuk membuat database di SQL server.
Sedangkan database first, adalah cara tradisional dimana developer membuat database langsung menggunakan SQL management studio. Dan menggunakan perintah SQL atau DDL (database definition language) seperti create database, create table, alter table dsb untuk membuat struktur tabel dan relasinya. Kemudian menggunakan dotnet cli dan entityframework scaffolding untuk membuat dbcontext dan model class menjadi file .cs.
Entityframework dan data migration akan saya jelaskan dalam blogpost berikutnya secara lebih mendalam dan spesifik. Untuk melanjutkan tutorial ini silakan buka folder Models, buat satu file baru; namanya belajaraDbContext.cs. Didalam-nya buat 3 POCO class yaitu TblUser, TblRole dan TblUserRole. TblUser memiliki properti UserName, Password, EmailAddress dan UserID. TblRole memilik 2 properti yaitu: RoleID dan RoleName. Sedangkan TblUserRole memiliki ID, TblUser dan TblRole yang menggambarkan relationship Many To Many antara tabel TblUser dan TblRole.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Data annotation [Key], untuk menandakan suatu property sebagai Primary Key. Masih banyak data annotations lain yang dapat dilihat di sini.
Register DbContext
Ganti isi Startup.cs dengan mengubah method ConfigureServices dan Configure, seperti di bawah. Dalam ConfiugureServices dengan menambah DbContext object dan menggunakan Sql Server Provider untuk EntityFrameworkCore, pada baris 27 configureservices akan membaca ConnectionString dari appsettings.json. Tambahkan juga dotnet cli tools reference Microsoft.EntityFrameworkCore.Tools.DotNet di dalam belajaraspnetcoremvc.csproj, gunanya untuk melakukan migrations.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Lakukan migrasi menggunakan dotnet cli untuk membuat database di SQL Server, ketik perintah beriku di dalam command prompt: dotnet ef migration add initial kemudian tekan enter dan file initial.cs akan dibuat di dalam folder Migrations, setiap kali semua file di dalam folder ini. Ketik dotnet ef database update untuk mengupdate database sesuai migration configuration yang ada di initial.cs. Sekarang kita bisa buka database dan lihat didalamnya ada tabel – tabel yang sudah dibuatkan. Langkah berikutnya adalah isikan data di tabel – tabel tersebut seperti di bawah:
TblRole
RoleID
RoleName
1
Pembaca
2
Penulis
3
Administrator
TblUser
UserID
EmailAddress
Password
UserName
1
testuser@mail.com
passwordtest
usertest
2
John@gmail.com
bacasaja
jonBaca
3
Henrick@outlook.com
tulisjuga
henWrite
4
vasily@outlook.com
passwordvas
vasilyYa
TblUserRole
ID
TblRoleRoleID
TblUserUserID
1
2
2
2
1
2
3
1
3
4
2
3
5
1
1
6
3
4
Menambah User Claims
untuk memberikan user autentikasi cookie, maka kita perlu memberikan Claims pada saat user berhasil login. Claims adalah pasangan nama dan nilai yang menggambarkan suatu object. CLaims disetting dengan tipe tertentu dan nilai yang sesuai atau yang kita inginkan, umumnya ClaimType.Name, ClaimType.Email, ClaimType.NameIdentifier dan ClaimType.Role.
Ubah SecurityController dan HomeController seperti dibawah ini, HomeController harus tambahkan [Authorize] attribute di About, Contact action dengan parameter Roles untuk mengarahkan otorisasi yang spesifik untuk role tertentu saja. Contoh dibawah hanya memperbolehkan user dengan role Pembaca dan Penulis yang bisa mengakses Contact dan About page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Save file, kemudian run project dengan menekan F5 pada VSCode atau ketik dotnet run -p .belajarnetcoremvc.csproj di terminal/powershell. Gunakan username dan password yang diisi sebelumnya, buka halam Contact dan About untuk mencoba otorisasi berdasar Role user.
full source code di sini. entityframework mvc migrations