2012-07-13 20 views
15

Ho un problema in cui è necessario aggiungere l'accesso a una cartella per tutti gli utenti autenticati per memorizzare le impostazioni relative alle applicazioni. Ho trovato che questo può essere fatto con il codice qui sotto ...Aggiunta di autorizzazioni a una cartella al livello di programmazione

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)); 

Il problema che ho trovato è che "gli utenti autenticati" è un account di sistema che si trova su Windows tuttavia, su diverse versioni di Windows questo il nome dell'account è tradotto, ad esempio in Germania questo account è chiamato 'Authentifizierte Benutzer'. C'è un modo per conoscere il nome corretto di questo account (senza l'ovvio di passare attraverso ogni lingua e trovare il nome account corretto).

risposta

26

Suggerirei di utilizzare l'elenco SID noto come noto (vedere http://support.microsoft.com/kb/243330). L'utente autenticato è sempre SID: S-1-5-11. Se lo usi, dovrebbe essere indipendente dal linguaggio (ma non ho provato).

Creare una e l'uso che, invece SecurityIdentifier:

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

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

Grazie mille !!! Verificherò (ho tutto configurato qui) e confermerò se funziona. –

+1

Funziona come un fascino !!! In tutta serietà avrei dovuto prenderlo io stesso osservando la documentazione più vicina. Molto apprezzato. –

+0

mi ha aiutato +1 :-) – Jodrell

Problemi correlati