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

  • HowtoDrawAndPaint

    HowtoDrawAnd

    24 EKİM 2010
  • NLthomas21

    NLthomas21

    20 Mayıs 2008
  • YAN TV

    YAN TV

    20 EKİM 2011