C# Admin Yetkisi Kontrolü

Herkese merhaba, C# yazılarımza kaldığımız yerden devam ediyoruz. Bu yazımızda C# ile Windows oturumunu admin olarak açıp açmadığımızı öğrenmeyi anlatacağım. Hadi başlayalım !
Table of Contents
Giriş
Yaptığınız bir projede C:/Program Files(x86) gibi bir sistem dizininde admin yetkisi gerektirecek bir işlem yapmak isteyebilirsiniz. Bu durumda öncelikle Windows kullanıcısının admin olarak giriş yapmış olması yada admin yetkilerine sahip olması gerekiyor. Aktif kullanıcının admin yetkisi varsa sonrasında uygulamanız için admin yetkisi istemeniz gerekecek. Aktif kullanıcının admin yetkisi yoksa programdan admin yetkisi istediğinizde hata verecektir. Bu yüzden öncelikle giriş yapmış kullanıcının admin yetkisi olup olmadığını kontrol etmemiz gerekiyor. Ben bu yazıda sadece aktif Windows kullanıcısının admin yetkisinin olup olmadığını öğrenmeyi anlatacağım.
System.Security.Principal Kütüphanesi ve WindowsIdentity Sınıfı
C# ile aktif Windows kullanıcısının admin yetkisinin olup olmadığını öğrenmek için System.Security.Principal kütüphanesinden faydalanacağız. Öncelikle WindowsIdentity sınıfını kullanarak aktif olan Windows kullanıcısını C# ile tespit edecek, sonra da WindowsPrincipal sınıfını kullanarak aktif kullanıcının admin yetkisi olup olmadığını tespit edeceğiz. Öncelikle WindowsIdentity sınıfından başlayalım. Bu sınıfı kullanabilmek için yeni bir nesnesini türetmemiz gerekiyor fakat yeni bir nesnesini türetmek için constructor metodu kullanılarak değil, kendi altında static olarak bulunan GetCurrent() fonksiyonunu kullanıyoruz. GetCurrent() fonksiyonu herhagi bir parametre istemiyor ve geriye yeni bir WindowsIdentity nesnesi döndürüyor.
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal Sınıfı
WindowsIdentity nesnesi oluşturup aktif kullanıcıyı temsil ettiğimize göre bu kullanıcının bulunduğu grubu da bulabiliriz. Bunu da WindowsPrincipal sınıfını kullanarak yapabiliyoruz ve bu sınıfı kullanabilmek için de yeni bir nesnesini türetmemiz gerekiyor. Yeni bir nesnesini constructor metodunu kullanarak yapabiliyoruz ve constructor metodu da parametre olarak 1 tane WindowsIdentity nesnesi istiyor. Yani az önce oluşturduğumuz identity nesnesini parametre olarak gönderebiliriz.
WindowsPrincipal principal = new WindowsPrincipal(identity);
Admin Yetkisi Kontrolü
Evet WindowsPrincipal nesnesi de türetip grup içerisinde bir kullanıcıyı kontrol etmeyi etkinleştirdiğimize göre artık aktif kullanıcının admin yetkisinde olup olmadığına bakabiliriz. Bunun için principal nesnesi altındaki IsInRole() fonksiyonunu kullanacağız. Bu fonksiyon bir tane WindowsBuiltInRole enum nesnesini parametre olarak istiyor ve geriye boolean değer döndürüyor. WindowsBuiltInRole enum altında AccountOperator, Administrator, BackupOperator, Guest, PowerUser, PrintOperator, Replicator, SystemOperator ve User değerleri var ve bunların hepsi Windows’ta kullanıcıya atanabilecek yetkileri temsil ediyor. Biz admin yetkisi olup olmadığına bakacağız ya, bunun Windows’taki karşılığı Administrator. Yani biz WindowsBuiltInRole enum nesnesi olarak Administrator kullanacağız. IsInRole() fonksiyonu geriye boolean değer döndürdüğü için döndürdüğü değeri de bir değişkene atayabiliriz yada doğrudan if şartı ile kontrol ederek true ise programı da yönetici olarak çalıştırmak için kullanıcıdan izin isteyebiliriz. IsInRole() fonksiyonu, kullanıcının parametre olarak gönderdiğimiz yetkisi varsa true, yoksa false değerini döndürüyor. Yani biz Administrator göndereceğiz ya, kullanıcının admin yetkisi varsa true, yoksa false döndürecektir.
bool kullaniciAdminMi = principal.IsInRole(WindowsBuiltInRole.Administrator);
if (kullaniciAdminMi) {
// Programda admin yetkisi isteme kodları buraya gelecek
}
Tüm Kodlar
Evet C# ile aktif Windows kullanıcısının admin yetkisinin olup olmadığını kontrol etme işlemi bu şekilde yapılmakta. Yazdığımız kodları daha toplu olması için aşağıya bırakıyorum;
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
bool kullaniciAdminMi = principal.IsInRole(WindowsBuiltInRole.Administrator);
if (kullaniciAdminMi) {
// Programda admin yetkisi isteme kodları buraya gelecek
}
Tüm C# yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.