SORU
14 Mart 2011, PAZARTESİ


Ekle "Herkes" klasör için ayrıcalık C#.NET kullanma

Aşağıdaki kodu Herkes bir klasöre erişimine izin vermek için kullandım:

System.Security.AccessControl.DirectorySecurity sec =
    System.IO.Directory.GetAccessControl(directory, AccessControlSections.All);
FileSystemAccessRule accRule = new FileSystemAccessRule("Everyone",
                                       FileSystemRights.Modify,
                                       AccessControlType.Allow);
sec.AddAccessRule(accRule);    // setACL
sec.ResetAccessRule(accRule);

Şimdi, Herkes kullanıcı herhangi bir hak atanan klasöre, ama eklenmez. Tüm okuma, vb yazmak yürütmek. onay kutusu işaretli değildir.

CEVAP
22 Mart 2011, Salı


Size söylemek istediğim ilk şey, bu çözüm buldum. Bu dosya izinleri doğru noktaya ulaşmak çok zor çünkü muhtemelen cevabı çok daha önemli.

Yaptığım ilk şey, Windows iletişim kutuları ve onay kutularını kullanmayı istedim izinleri ayarlandı. Bir kural ekledim "Herkes" ve dışındaki tüm kutuları işaretli "Tam Kontrol".

O zaman bu yazdığım C# tam olarak ne Windows Ayarları çoğaltmak istiyorum bana söylemek kodu:

string path = @"C:\Users\you\Desktop\perms"; // path to directory whose settings you have already correctly configured
DirectorySecurity sec = Directory.GetAccessControl(path);
foreach (FileSystemAccessRule acr in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) {
    Console.WriteLine("{0} | {1} | {2} | {3} | {4}", acr.IdentityReference.Value, acr.FileSystemRights, acr.InheritanceFlags, acr.PropagationFlags, acr.AccessControlType);
}

Bu bana çıktı bu cümle söyledi:

Everyone | Modify, Synchronize | ContainerInherit, ObjectInherit | None | Allow

Yani çözüm basit (henüz sabit nasıl bilmiyorum ama sağ olsun!):

DirectorySecurity sec = Directory.GetAccessControl(path);
// Using this instead of the "Everyone" string means we work on non-English systems.
SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
Directory.SetAccessControl(path, sec);

Bu Windows Güvenlik iletişim kutuları zaten test dizininiz için ayarladığınız ne maç yapacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • ASUS

    ASUS

    22 EKİM 2005
  • EmmightySofia

    EmmightySofi

    25 EYLÜL 2011