我正在编写一个实用程序,以帮助更改某个文件上的文件许可权,以允许/禁止Windows计算机上“每个人”组对其的访问。到目前为止,我已经可以使用以下代码来设置“Everyone”对文件的“完全控制”权限并将其删除:
void AddFullControl()
{
FileSecurity fsFile = File.GetAccessControl("file.tmp");
fsFile.SetAccessRule( new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
File.SetAccessControl("file.tmp", fsFile);
}
void RemoveFullControl()
{
FileSecurity fsFile = File.GetAccessControl("file.tmp");
fsFile.SetAccessRule( new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Deny));
File.SetAccessControl("file.tmp", fsFile);
}
但是,我想检查“每个人”是否已经具有“完全控制”权限,并且还没有找到执行此操作的方法。在Google搜索之后,我花了几天时间在Google搜索中进行搜索,但一直无法找到一种方法。有人可以给我指出正确的方向,还是请给我一个有关如何执行此操作的示例?
更新:
这很快就得到了回答,我能够提出有效的C#代码。我创建的代码如下:
void CheckAccess()
{
AuthorizationRuleCollection arcFile = File.GetAccessControl("file.tmp").GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));
foreach (AuthorizationRule arFile in arcFile)
{
if (arFile.IdentityReference.Value == "Everyone")
{
FileSystemAccessRule fasrFile = (FileSystemAccessRule)arFile;
if (fasrFile.AccessControlType == AccessControlType.Allow && fasrFile.FileSystemRights.HasFlag(FileSystemRights.FullControl))
{
MessageBox.Show("file.tmp already has Full Control permissions granted to Everyone");
}
}
}
}
最佳答案
var everyone = fsFile.GetAccessRules(true, true, typeof(SecurityIdentifier))
.Cast<FileSystemAccessRule>()
.SingleOrDefault(x => x.IdentityReference.Value == "S-1-1-0");
bool fullControlAllowed = everyone != null
&& everyone.AccessControlType == AccessControlType.Allow
&& everyone.FileSystemRights.HasFlag(FileSystemRights.FullControl);
如果权限可能同时包含
Allow
的Deny
和Everyone
条目,则您将必须使用以下代码。它的语义略有不同,因为您没有获得有关everyone
Deny
条目的详细信息。var everyone = fsFile.GetAccessRules(true, true, typeof(SecurityIdentifier))
.Cast<FileSystemAccessRule>()
.SingleOrDefault(x => x.IdentityReference.Value == "S-1-1-0"
&& x.AccessControlType == AccessControlType.Allow);
bool fullControlAllowed = everyone != null
&& everyone.FileSystemRights.HasFlag(FileSystemRights.FullControl)
关于c# - 如何检查 "Everyone"是否对C#中的文件具有完全控制权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19525487/