在C#中更改子文件夹的权限

sto*_*age 4 .net c#

我正在编写一个DLL来更改文件夹和文件夹下的所有内容的权限.下面是我现在的代码.

当我调用addPermissions()时会出现问题.它正确设置dirName文件夹和我稍后在dirName下创建的任何文件夹的权限,但是当我添加权限时存在的任何文件夹都没有获得其他权限.

我是否需要以递归方式设置所有子文件夹的权限?或者有一种方法可以使用一行或两行代码执行此操作吗?

public class Permissions
{
    public void addPermissions(string dirName, string username)
    {
        changePermissions(dirName, username, AccessControlType.Allow);
    }

    public void revokePermissions(string dirName, string username)
    {
        changePermissions(dirName, username, AccessControlType.Deny);
    }

    private void changePermissions(string dirName, string username, AccessControlType newPermission)
    {
        DirectoryInfo myDirectoryInfo = new DirectoryInfo(dirName);

        DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();

        string user = System.Environment.UserDomainName + "\\" + username;

        myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(
            user, 
            FileSystemRights.Read | FileSystemRights.Write | FileSystemRights.ExecuteFile | FileSystemRights.Delete, 
            InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
            PropagationFlags.InheritOnly, 
            newPermission
        ));

        myDirectoryInfo.SetAccessControl(myDirectorySecurity);
    }
}
Run Code Online (Sandbox Code Playgroud)

Man*_*ert 5

这个问题很老,但我一直在寻找相同的东西并找到了解决方案:

var dirInfo = new DirectoryInfo(dirName);
var dirSecurity = dirInfo.GetAccessControl();

// Add the DirectorySystemAccessRule to the security settings. 
dirSecurity.AddAccessRule(new FileSystemAccessRule(
    account, 
    rights, 
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
    PropagationFlags.None, 
    AccessControlType.Allow));

// Set the new access settings.
dirInfo.SetAccessControl(dirSecurity);
Run Code Online (Sandbox Code Playgroud)

问候