Authorization bizim rolleme mekanizması kurmamızı sağlar yani hangi tip kullanıcı hangi isteklere erişebilsin gibi kontrolleri sağllar.
Biz daha önce Database’imizde Users tablomuzda 2 kullanıcı oluşturup Role Sütununa birine U (User) diğerine A (Admin) değişkenlerini tanımlamıştık

I.Daha önce oturum işlemleri için [Authorize] attribute’unu kulllanmıştık, Rolleme yapmak için kendi Authorize attribute’unu kendim yazmam gerekiyor yani bir CustomAuthorize yazacağız. Bu Class içerisindeki OnAuthorization methodunu override edeceğiz
Security SağTık>Add>Class : APIAuthorizeAttribute.cs isminde bir Class ekledik AuthorizeAttribute’den miras aldık.
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext); //Buraya bir breakpoint koyalım (OnAuthorization methoduna düşüyor muyuz? Test için)
}
II. Artık Authorize Attribute’unu değil de kendi yazdığımız Attribute’u kullanmak istiyoruz bunun için ilgili Method ya da Controller’a gidip [Authorize] yerine [APIAuthorize] yazdık.
[APIAuthorize]
public IHttpActionResult Get()
{
....
}
III. Bu işlemlerden OnAuthorization methodumuza düşüyor muyuz kontrol edelim OnAuthorization’a bir breakpoint atıp, Fiddler’a gidip userKey’i database’deki user key vererek get methodunu çağıralım
Fiddler>Composer tabı > https://localhost:44366/api/languages ve body kısmına apiKey: da8a2494-bc58-443c-8c94-b805c84b3a3c yazıp çağırdık
IV. İlgili Controller ya da Controller’ımızdaki Methoda’a geçip [APIAuthorize] yerine [APIAuthorize(Roles =”A”)] yani seni sadece Admin çalıştırabilir dedik aynı şekilde hem admin hem user için [APIAuthorize(Roles =”A,U”)] ‘da diyebiiliriz
[APIAuthorize(Roles ="A")]
public IHttpActionResult Get()
{
...
}
V. Şimdi rolleri karşı tarafta yani APIAuthorize.cs’de yakalamalıyız ama ondan önce Rolleme işlemi için UsersDAL’dan ilgili User’ın verilerini çekmeliyiz
ProjectDbWebServicesDAL/UsersDAL.cs’e gidip GetUserById(string Name) methodunu yazdık buna göre gönderdiğimiz Name’li User’ı bulup tüm bilgilerini döndürecek
public Users GetUserByName(string name)
{
return db.Users.FirstOrDefault(x => x.Name == name);
}
VI.APIAuthorize’a gidelim [APIAuthorize(Roles =”A”)] ‘den gelen methoddaki bilgiye göre User’ı çağıralım Role’ü o method için uygun mu onu kontrol edelim
public class APIAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
var actionRoles = Roles; //Roles'den gelen veriyi al örneğin U geldi ya da A,U geldi gibi
var userName = HttpContext.Current.User.Identity.Name; //Oturum açan kullanıcının Name'ini al
UsersDAL usersDAL = new UsersDAL(); //Name'i Db'den sorgulatmak için UsersDAL'dan instance üret
var user = usersDAL.GetUserByName(userName); //Oturum açan kullanıcının Name'ini sorgulayarak User bilgilerini al user değişkenine ata
if (user!=null && actionRoles.Contains(user.Role)) //Eğer oturumu açan kullanıcı null değil ve Roles'ten gelen (actionRoles) db'den sorguladığımız user objesindeki Role'e eşitse birşey yapma (default isteği döndürür)
{
}
else
{
actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized); //Değilse Unauthorized şeklinde cevap gönder.
}
}
}

Yorum bırakın