c# premiere wpf - Comment accorder l'autorisation complète à un fichier créé par mon application pour TOUS les utilisateurs?




1 Answers

Note aux personnes utilisant ceci.

Lorsque vous utilisez des chaînes littérales pour le FileSystemAccessRule , il doit être WellKnownSidType.WorldSid au lieu de "everyone" .

La raison en est qu'il y a plusieurs langages Window et que tout le monde ne s'applique qu'aux EN, alors pour l'espagnol, il peut s'agir de "Todos" (ou d'autre chose).

using System.Security.AccessControl;
using System.Security.Principal;
using System.IO;

private void GrantAccess(string fullPath)
{
    DirectoryInfo dInfo = new DirectoryInfo(fullPath);
    DirectorySecurity dSecurity = dInfo.GetAccessControl();
    dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
    dInfo.SetAccessControl(dSecurity);
}
openclassroom pdf

L'outil que je développe doit accorder des droits d'accès "Full Control" à un fichier créé par lui. Il doit être lu, modifié et supprimé de tous les comptes Windows et même des futurs comptes possibles. Cela pourrait-il être réalisé?

Je sais que je peux essayer ceci pour un SPECIFIC_USER:

FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow);
FileSecurity fSecurity = File.GetAccessControl(filePath);
fSecurity.SetAccessRule(rule);
File.SetAccessControl(filePath, fSecurity);

Mais comment puis-je l'accorder à tous les utilisateurs? Et même les futurs comptes possibles? Si la dernière partie n'est pas possible, comment procéder à la première exigence?

Merci.

MODIFIER:

C'est le code qui a fonctionné pour moi. Pris du lien du répondeur.

private bool GrantAccess(string fullPath)
{
    DirectoryInfo dInfo = new DirectoryInfo(fullPath);
    DirectorySecurity dSecurity = dInfo.GetAccessControl();
    dSecurity.AddAccessRule(new FileSystemAccessRule("everyone", FileSystemRights.FullControl,
                                                     InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,
                                                     PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
    dInfo.SetAccessControl(dSecurity);
    return true;
}

Notez le PropagationFlags.NoPropagateInherit qui est requis (mentionné vers le dernier dans le lien). Il accorde des privilèges même aux futurs comptes.




Related