【发布时间】:2010-11-20 08:52:33
【问题描述】:
我想将文件夹的安全设置应用于 C# 中的所有后代。本质上,我想在“[文件夹] 的高级安全设置”中执行与“用该对象的可继承权限替换所有后代的所有现有可继承权限”相同的操作。
有什么优雅的方法可以解决这个问题吗?
【问题讨论】:
标签: c# windows permissions
我想将文件夹的安全设置应用于 C# 中的所有后代。本质上,我想在“[文件夹] 的高级安全设置”中执行与“用该对象的可继承权限替换所有后代的所有现有可继承权限”相同的操作。
有什么优雅的方法可以解决这个问题吗?
【问题讨论】:
标签: c# windows permissions
在 google 和 MSDN 度过一段美好时光后,我想出了以下代码。似乎工作得很好。
static void Main(string[] args)
{
DirectoryInfo dInfo = new DirectoryInfo(@"C:\Test\Folder");
DirectorySecurity dSecurity = dInfo.GetAccessControl();
ReplaceAllDescendantPermissionsFromObject(dInfo, dSecurity);
}
static void ReplaceAllDescendantPermissionsFromObject(
DirectoryInfo dInfo, DirectorySecurity dSecurity)
{
// Copy the DirectorySecurity to the current directory
dInfo.SetAccessControl(dSecurity);
foreach (FileInfo fi in dInfo.GetFiles())
{
// Get the file's FileSecurity
var ac = fi.GetAccessControl();
// inherit from the directory
ac.SetAccessRuleProtection(false, false);
// apply change
fi.SetAccessControl(ac);
}
// Recurse into Directories
dInfo.GetDirectories().ToList()
.ForEach(d => ReplaceAllDescendantPermissionsFromObject(d, dSecurity));
}
【讨论】:
var ac = new FileSecurity();,而不是重用现有的实例并对其进行修改。否则,您最终可能会获得重复的权限。
您可能会发现 DirectorySecurity 类对此很有用。
http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.directorysecurity.aspx
System.Security.AccessControl 中可能还有一些其他有价值的工具 命名空间
【讨论】: