2013-10-24 48 views
0

我将为文件设置完全访问权限(fileName)。我发现了一个代码示例:为什么我应该将`filename`传递给`SetAccessControl`方法?

var security = IO.File.GetAccessControl(fileName); 

security.AddAccessRule(new Security.AccessControl.FileSystemAccessRule(
    new SecurityIdentifier(WellKnownSidType.WorldSid, null), 
    Security.AccessControl.FileSystemRights.FullControl, 
    Security.AccessControl.AccessControlType.Allow)); 

IO.File.SetAccessControl(fileName, security); 

它运作良好,但我不明白为什么我应该通过filenameSetAccessControl方法(我已经在第一线提供的话)?我做了更改代码,看看这是工作压力太大:

var security = IO.File.GetAccessControl(anotherFileName); 

security.AddAccessRule(new Security.AccessControl.FileSystemAccessRule(
    new SecurityIdentifier(WellKnownSidType.WorldSid, null), 
    Security.AccessControl.FileSystemRights.FullControl, 
    Security.AccessControl.AccessControlType.Allow)); 

IO.File.SetAccessControl(fileName, security); 

那么,什么是使用anotherFileName这里?

回答

2

GetAccessControl将获得FileSecurity

从MSDN:

代表某个文件的访问控制和审计的安全性。 [...]这个类将访问和审计权表示为一组规则。

一个FileSecurity是不依赖于一个特定的文件,所以您可以使用多个文件一个FileSecurity设置相同的访问和审计权。

这就是为什么你需要指定文件名。

另一种方法是使用FileInfo类。

var fileInfo = new FileInfo(filename); 
var security = fileInfo.GetAccessControl(); 
// [...] 
fileInfo.SetAccessControl(security); 

constructors从MSDN:

FileSecurity() 

将创建一个空FileSecurity对象。

FileSecurity(String, AccessControlSections) 

创建一个从指定文件中使用AccessControlSections枚举的指定值的空FileSecurity对象。

+0

'FileSecurity不依赖于特定的文件'。那么为什么它在构造函数中得到一个文件名呢? –

+1

构造函数将从文件复制权限。 – Romoku

+0

如果我想在不提供文件名的情况下获得某些默认安全性,该怎么办? –

0

安全信息(ACL)与对象无关,因此您可以获取一个文件的当前值并应用于任何其他文件。

这与string name = person.Name完全一样 - name不绑定到person,只是一个属性之一。

相关问题