2012-07-13 13 views
15

Mam problem, który muszę dodać, aby dać dostęp do folderu dla wszystkich uwierzytelnionych użytkowników, aby zapisać ustawienia związane z aplikacją. Przekonałem się, że można to zrobić przy użyciu poniższego kodu ...Programowe dodawanie uprawnień do folderu

var Info = new DirectoryInfo(settingsdir); 
var Security = Info.GetAccessControl(AccessControlSections.Access); 

Security.AddAccessRule(
    new FileSystemAccessRule(
     "Authenticated Users", FileSystemRights.Modify, 
     InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
     PropagationFlags.None, 
     AccessControlType.Allow)); 

Problem znalazłem jest to, że „Użytkownicy uwierzytelnieni” to system, który ma konto na oknach jednak w różnych wersjach językowych systemu Windows to nazwa konta jest tłumaczona, na przykład w Niemczech to konto nazywa się "Authentifizierte Benutzer". Czy istnieje sposób na poznanie właściwej nazwy tego konta (bez oczywistego przechodzenia przez każdy język i znajdowania prawidłowej nazwy konta).

Odpowiedz

26

Proponuję użyć dobrze znanej listy identyfikatorów SID (patrz http://support.microsoft.com/kb/243330). Uwierzytelniony użytkownik jest zawsze identyfikatorem SID: S-1-5-11. Jeśli używasz tego, to powinno być agnostyczne (ale nie testowałem).

Tworzenie SecurityIdentifier i używać zamiast:

var sid = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null); 

Security.AddAccessRule(
    new FileSystemAccessRule(
     sid, 
     FileSystemRights.Modify, 
     InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
     PropagationFlags.None, 
     AccessControlType.Allow)); 
+0

Dziękuję bardzo !!! Testuję (mam wszystko ustawione tutaj) i sprawdzam, czy działa. –

+1

Działa jak urok !!! Z całą powagą powinienem był to złapać, patrząc na dokumentację bliżej. Bardzo doceniane. –

+0

pomógł mi +1 :-) – Jodrell

Powiązane problemy