设置目录/子目录/文件的权限

MansNotHot

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

到目前为止,我发现了如何设置特定文件夹的权限。但是不适用于原始文件夹中的子文件夹和文件。经过广泛的互联网搜索,我找不到有关如何解决此问题的任何线索。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);

    }
}

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

Ambidex

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

若要获得传播到子文件夹的权限,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);

    }

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章