Cara Membuat Custom Role Login ASP.NET MVC

Cara Membuat Custom Role Login ASP.NET MVC

Pada tutorial sebelumnya terkait cara membuat custom login pada ASP.NET MVC, ada pertanyaan terkait dengan adanya role pada masing-masing identitas login sehingga role ini berfungsi juga sebagai hak akses/security terhadap masing-masing user pada controller atau halaman yang diakses.

Caranya pun cukup mudah dengan hanya menambahkan jenis claim role ClaimTypes.Role pada saat user melakukan autentifikasi login. Sehingga hasilnya masing-masing user hanya dapat mengakses halaman-halaman tertentu saja yang telah didefinisikan role-nya.

Penambahan role dapat didefinisikan pada atribut [Authorize] pada masing-masing controller dengan menambahkan tipe role yang ingin digunakan misalnya role "Administrator".

Pada contoh dibawah ini hanya user yang memiliki role "Administrator" saja yang dapat mengakses halaman home (HomeController). User yang tidak memiliki role "Administrator" makan akan ditolak dan akan diarahkan kehalaman login.

    [Authorize(Roles ="Administrator")]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }

Roles juga dapat digunakan untuk banyak tipe misalnya yang boleh mengakses halaman home hanya user yang memiliki role "Administrator", "User Admin", dan "Manager" saja. Roles lain selain role diatas maka akan ditolak oleh sistem.

    [Authorize(Roles ="Administrator, User Admin, Manager")]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }

Untuk membuat role seperti diatas, caranya adalah pada saat user melakukan autentifikasi login, kalian dapat menambahkan Claim Identity dengan tipe ClaimTypes.Role dengan nilai tertentu sesuai role masing-masing user. Contohnya dapat dilihat pada kode dibawah pada baris 9:

private async Task SignInAsync(UserModel user, bool isPersistent)
{
	AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
	var identity = await _customUserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
	identity.AddClaim(new Claim(UserClaim.User_Id, user.Id ?? user.Id, ClaimValueTypes.Integer));
	identity.AddClaim(new Claim(UserClaim.Fullname, user.Fullname ?? string.Empty, ClaimValueTypes.String));
	identity.AddClaim(new Claim(UserClaim.Email, user.Email ?? string.Empty, ClaimValueTypes.String));
	identity.AddClaim(new Claim(UserClaim.Phone, user.Phone ?? string.Empty, ClaimValueTypes.String));
	identity.AddClaim(new Claim(ClaimTypes.Role, user.Role));

	AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}
[ads id="ads1"]

Penambahan role diatas akan disimpan oleh Owin sebagai role user yang dapat digunakan untuk validasi dan keamanan akses masing-masing controller yang memiliki atribut [Authorize(Roles=)]

Untuk membuktikan role diatas sudah bekerja atau belum dapat dipanggil jenis role yang digunakan oleh user dengan cara membuat helper IIdentity terlebih dahulu agar kedepannya lebih mudah dalam penggunaannya.

public static partial class UserIdentity
{
	public static string Get_Role(this IIdentity identity)
	{
		ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;
		Claim claim = claimsIdentity?.FindFirst(ClaimTypes.Role);
		return claim?.Value ?? string.Empty;
	}
}

Kode diatas dapat dipanggil langsung melalui view dengan memanggil perintah @HttpContext.Current.User.Identity.Get_Role().

Cukup mudah bukan?. Untuk yang belum jelas dapat meninggalkan pertanyaan atau komentar dibawah agar lebih interaktif.

Terima kasih sudah membaca dan untuk yang membutuhkan source code sebagai panduan atau sekedar pembelajaran lebih lanjut, dapat kalian download di https://drive.google.com/file/d/1KXGbRgXhpO3TnT4ETXhO2zFdj9rm7zoZ/view?usp=sharing

Semoga bermanfaat.

0/Post a Comment/Comments

Lebih baru Lebih lama