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

  • Disney Pets and Animals

    Disney Pets

    29 ŞUBAT 2012
  • MrRandomSong

    MrRandomSong

    29 Kasım 2009
  • TotalxLuna

    TotalxLuna

    27 Kasım 2011