21 Mayıs 2011 Cumartesi

Klasör Erişim İzinlerini Ayarlamak

Bilgisayarımızda paylaşımda olan veya olmayan klasörlere erişimi kısıtlamak isteyebiliriz. Bunun için projemize
using System.IO;
using System.Security.AccessControl;
using System.Management;
using System.Management.Instrumentation;

namespacelerini ekliyoruz. Bir klasöre ait izinleri ayarlamak için öncelikle klasörün yolunu DirectoryInfo türünden bir değişkene aktarmamız gereklidir.
DirectoryInfo dizin = new  DirectoryInfo("c:\YazilimGrubu");
Daha sonra bu dizine erişimleri kontrol edecek DirectorySecurity türünden bir değişken tanımlıyoruz ve bu değişkene erişim haklarını ayarlayacağımız dizinin erişim denetleyicisini aktarmamız gerekli. Bunu da
DirectorySecurity guvenlik = dizin.GetAccessControl();
komutuyla yapıyoruz. Sıra geldi dizine uygulayacağımız erişim haklarını belirlemeye Bunun için FileAccessRule türünden değişkenler tanımlıyoruz her bir erişim türü için (Okuma, Yazma, Değiştirme vb.) ayrı bir değişken tanımlıyoruz.

FileSystemAccessRule okuma;   //Okuma yetkisi için değişken
FileSystemAccessRule yazma;   //Yazma yetkisi için değişken
FileSystemAccessRule degistirme; //Değiştirme yetkisi için değişken
FileSystemAccessRule tamyetki;  //Tam kontrol yetkisi için değişken

değişkenleri tanımladıktan sonra bunların hangi kullanıcılar için geçerli olacağını izin verilip verilmeyeceğini ayrı ayrı belirliyoruz.

okuma= new FileSystemAccessRule("olcayguzel", FileSystemRights.Read, AccessControlType.Allow);  // okuma yetkisi verildiWrite = new FileSystemAccessRule("olcayguzel", FileSystemRights.Write, AccessControlType.Allow);  //Yazma yetkisi verildiModify = new FileSystemAccessRule("olcayguzel", FileSystemRights.Modify,  AccessControlType.Deny); //Değiştirme yetkisi verilmediFullControl = new FileSystemAccessRule("olcayguzel", FileSystemRights.FullControl, AccessControlType.Deny);  //Tam kontrol yetkisi verilmedi           

Eğer görsel bir arayüzünüz var ve kullanıcının yetkileri seçebilmesini istiyorsanız CheckBox bileşeninden faydalanabilirsiniz. Bu durumda kolaylık olması açısından şu şekilde kullanabilirsiniz.

okuma= new FileSystemAccessRule("olcayguzel", FileSystemRights.Read, chkOkuma.Checked == true ? AccessControlType.Allow:AccessControlType.Deny );
 Yetki durumlarını belirlediğimize göre bunları dizinimizin güvenlik denetleyicisine aktarıyoruz.

guvenlik.AddAccessRule(okuma);
guvenlik.AddAccessRule(yazma);
guvenlik.AddAccessRule(degistirme);
guvenlik.AddAccessRule(tamyetki);

Son olarak da dizinimin erişim denetleyicisine guvenlik ayarlarını aktarıyoruz.
dizin.SetAccessControl(guvenlik);

NOT:
chkOkuma.Checked == true ? AccessControlType.Allow : AccessControlType.Deny

bu komut şunu ifade eder. chkOkuma bileşeninin Checked özelliğini "true" değeri ile karşılaştırır karşılaştırmanın sonucu doğru ise
soru işaretinden hemen sonraki komut yanlış ise en son komut çalıştırılır. aslında if komutunun kısaltılmış halidir. bu komut yerine if komutu kullanılmış olsaydı şu şekilde kullanılacaktı.
if(chkOkuma.Checked == true)
{
okuma= new FileSystemAccessRule("olcayguzel", FileSystemRights.Read, AccessControlType.Allow);
}
else
{
okuma= new FileSystemAccessRule("olcayguzel", FileSystemRights.Read, AccessControlType.Deny);
}
Aynı işi daha kısa bir şekilde yani
chkOkuma.Checked == true ? AccessControlType.Allow:AccessControlType.Deny;şeklinde kullanmak daha mantıklıdır.

Hiç yorum yok:

Yorum Gönder