C# 创建具有父权限的文件夹,然后添加其他权限
在C#中,我想在另一个文件夹(或驱动器的根目录)中添加一个文件夹,但我想复制根文件夹的权限,然后将另一个用户添加到新文件夹ACL以及父文件夹ACL(如果有意义的话) 例如。。。如果我有一个名为blah的文件夹,并且在该文件夹中我希望另一个名为blah2的文件夹,我希望blah2具有blak plus的ACL权限,我希望将经过身份验证的用户添加到该列表中C# 创建具有父权限的文件夹,然后添加其他权限,c#,.net,C#,.net,在C#中,我想在另一个文件夹(或驱动器的根目录)中添加一个文件夹,但我想复制根文件夹的权限,然后将另一个用户添加到新文件夹ACL以及父文件夹ACL(如果有意义的话) 例如。。。如果我有一个名为blah的文件夹,并且在该文件夹中我希望另一个名为blah2的文件夹,我希望blah2具有blak plus的ACL权限,我希望将经过身份验证的用户添加到该列表中 有什么想法吗?右键单击根文件夹,并确保该文件夹设置为将权限下推到任何子文件夹中。创建文件夹后,使用MSDN article向文件夹中添加您想要的
有什么想法吗?右键单击根文件夹,并确保该文件夹设置为将权限下推到任何子文件夹中。创建文件夹后,使用MSDN article向文件夹中添加您想要的任何ACL。您需要了解的主要过程是添加/修改文件或目录的ACL
var parentDir = new DirectoryInfo(@"c:\some\directory");
var parentAc = parentDir.GetAccessControl();
首先,要获取目录的权限集,可以使用DirectoryInfo.GetAccessControl()
方法(文件将具有类似的FileInfo.GetAccessControl()
)或静态目录.GetAccessControl()
。这将为您提供一个对象,其中包含目录的ACL和其他安全信息
var parentDir = new DirectoryInfo(@"c:\some\directory");
var parentAc = parentDir.GetAccessControl();
一旦获得,您就可以获取该目录的访问规则(前提是您有这样做的权限)。您可以选择获取继承的或显式定义的规则,或者同时获取这两种规则。有一个targetType
参数,您可以指定如何获取标识信息。您可能希望使用System.Security.Principal.NTAccount
类型作为用户友好的标识符。顾名思义,继承的权限是从父目录继承的权限,而显式权限是直接添加的权限
var inheritedRules = parentAc.GetAccessRules(
includeExplicit: false,
includeInherited: true,
targetType: typeof(System.Security.Principal.NTAccount)
);
var explicitRules = parentAc.GetAccessRules(
includeExplicit: true,
includeInherited: false,
targetType: typeof(System.Security.Principal.NTAccount)
);
这将为您提供表示ACL的FileSystemAccessRule
对象集合。从这里,您可以获取这些规则并将其添加到您想要添加到的目录中。但是如果你想创建新的规则,你必须手工创建规则。看一看这门课,看看你有什么选择。如果您想让每个人都拥有完全的控制权,您可以创建以下规则:
var newRule = new FileSystemAccessRule(
new System.Security.Principal.NTAccount("Everyone"),
FileSystemRights.FullControl,
AccessControlType.Allow
);
要添加新规则,只需获取规则并将其添加到要添加到的访问控制对象中。您不必添加继承的规则,因为。。。它们将被继承,但您可能希望添加显式规则。请注意,对访问控制对象所做的更改将不会反映实际目录,除非您将其设置回原来的目录
var dir = parentDir.CreateSubdirectory("test");
var ac = dir.GetAccessControl();
ac.AddAccessRule(newRule);
foreach (FileSystemAccessRule rule in explicitRules)
ac.AddAccessRule(rule);
dir.SetAccessControl(ac);
当然,您还可以做更多的事情,但这将有助于您了解自己想要做什么。新文件和文件夹的权限不是已经继承了吗?这应该只是创建文件夹和添加新权限的问题。我认为,如果您将权限更改为文件夹,则在添加新权限之前会首先清除父权限,因此我需要从父权限读取权限?您可能是对的,我不确定是否真的这样做。我只是想看看你有没有考虑过。这就是我理解(NTFS)文件系统工作的方式,.net操作只是暴露了其中的一些。啊,好的:)我的理解是,当你修改文件夹上的ACL时,它不再从父文件夹继承,因此当你添加另一个用户时,你会失去这些权限。。。我想我是对的:)