【问题标题】:Set permissions for directorys/subdirectorys/files设置目录/子目录/文件的权限
【发布时间】:2018-04-26 08:41:40
【问题描述】:

我希望能够为特定用户设置目标文件夹内的子文件夹和文件的权限。

到目前为止,我发现了如何为特定文件夹设置权限。但不适用于原始文件夹中的子文件夹和文件。 经过广泛的互联网搜索,我找不到任何关于如何解决这个问题的线索。此外,windows doku 仅显示了如何为目录设置权限。

class DirectoryPermissions
{
    public static void DirectoryPermissionsMain(string Directory, string Account, string Rights, int Takeaway, string Domain)
    {
        try
        {
            string DirectoryName = Directory;

            Console.WriteLine("Adding access control entry for " + DirectoryName);
            if(Takeaway == 0 && Rights.Equals("Read")){
                AddDirectorySecurity(DirectoryName, Domain + @"\" + Account, FileSystemRights.ReadData, AccessControlType.Allow);

                Console.WriteLine("Removing access control entry from " + DirectoryName);
            }

            MessageBox.Show("Done");

        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

        Console.ReadLine();
    }

    // Adds an ACL entry on the specified directory for the specified account.
    public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
    {
        // Create a new DirectoryInfo object.
        DirectoryInfo dInfo = new DirectoryInfo(FileName);

        // Get a DirectorySecurity object that represents the 
        // current security settings.
        DirectorySecurity dSecurity = dInfo.GetAccessControl();

        // Add the FileSystemAccessRule to the security settings. 
        dSecurity.AddAccessRule(new FileSystemAccessRule(Account,
                                                        Rights,
                                                        ControlType));

        // Set the new access settings.
        dInfo.SetAccessControl(dSecurity);

    }
}

我希望你们中的一个人能指出我正确的方向。

【问题讨论】:

    标签: c# permissions directory


    【解决方案1】:

    您必须添加另一个 AccessRule,并将 InheritanceFlags 设置为 ContainerInherit AND ObjectInherit。

    为了获得传播到子文件夹的权限,PropagationFlag 设置为仅继承。

    下面是一个例子

        public void PropogateSecurity(string userid,string directory)
        {
    
            var myDirectoryInfo = new DirectoryInfo(directory);
            var myDirectorySecurity = myDirectoryInfo.GetAccessControl();
            myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(userid, FileSystemRights.Modify, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
            myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(userid, FileSystemRights.Modify, InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
            myDirectoryInfo.SetAccessControl(myDirectorySecurity);
    
        }
    

    您也可以使用递归来执行此操作,但上述方法是我的首选方法,因为清理权限会很烦人。

    【讨论】:

      猜你喜欢
      • 2018-12-10
      • 2012-11-15
      • 2013-07-11
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2010-12-20
      • 2019-05-11
      相关资源
      最近更新 更多