[C#] DirectorySecurity définit des autorisations spéciales alors que FileSecurity ne le fait pas



Answers

Voici quelque chose que vous pouvez essayer Logan en ce qui concerne l'ajout d'autorisations à un fichier

essayez ce code si de l'aide

    public static bool CheckReadWriteAccces(string filePath, System.Security.AccessControl.FileSystemRights fileSystemRights)
    {
        FileInfo fileInfo = new FileInfo(filePath);

        string str = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToUpper();
        foreach (System.Security.AccessControl.FileSystemAccessRule rule in fileInfo.GetAccessControl().GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
        {
            if (str == rule.IdentityReference.Value.ToUpper())
                return ((rule.AccessControlType == System.Security.AccessControl.AccessControlType.Allow) && (fileSystemRights == (rule.FileSystemRights & fileSystemRights)));
        }

        return false;
    }


    /// <summary>
    /// Make a file writteble
    /// </summary>
    /// <param name="path">File name to change</param>
    public static void MakeWritable(string path)
    {
        if (!File.Exists(path))
            return;
        File.SetAttributes(path, File.GetAttributes(path) & ~FileAttributes.ReadOnly);
    }
Question

Examinez les deux blocs de code suivants:

System.Security.AccessControl.DirectorySecurity dsec = System.IO.Directory.GetAccessControl(str);
System.Security.Principal.NTAccount group= new System.Security.Principal.NTAccount("DOMAIN","USERGROUP");
System.Security.AccessControl.FileSystemAccessRule myrule = new System.Security.AccessControl.FileSystemAccessRule(group,System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.AccessControlType.Allow);
dsec.SetAccessRule(myrule);
System.IO.Directory.SetAccessControl(str,dsec);

et

System.Security.AccessControl.FileSecurity fsec = System.IO.File.GetAccessControl(file);
System.Security.Principal.NTAccount group= new System.Security.Principal.NTAccount("DOMAIN","USERGROUP");
System.Security.AccessControl.FileSystemAccessRule myrule = new System.Security.AccessControl.FileSystemAccessRule(group,System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.AccessControlType.Allow);
fsec.SetAccessRule(myrule);
System.IO.File.SetAccessControl(file,fsec);

On s'attendrait à ce que les deux fassent exactement la même chose, un seul dans un répertoire et un autre dans un fichier. Et, à certains égards, ils le font. Dans les deux cas, l'objet du système de fichiers en question change de sorte que DOMAIN \ USERGROUP possède les autorisations effectives du contrôle total.

Cependant, la partie étrange est, quand vous faites un clic droit sur un fichier et affichez la sécurité, vous voyez ceci:

et quand vous faites un clic droit sur un dossier et affichez la sécurité, vous voyez ceci:

Si je vais alors dans Advanced-> Effective Permissions-> Select (DOMAINE \ USERGROUP), cela montre que les permissions effectives pour le dossier, pour ce groupe, sont Full Control (Toutes les cases sont cochées, pas seulement la Full Control Box Ce serait encore plus bizarre).

Ma question est, pourquoi est-il une différence dans l'effet d'une mise en œuvre presque identique et quelqu'un sait-il comment reproduire l'effet de l'application des autorisations sur les fichiers?




Links