我正在编写一个实用程序,以帮助更改某个文件上的文件许可权,以允许/禁止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);

如果权限可能同时包含AllowDenyEveryone条目,则您将必须使用以下代码。它的语义略有不同,因为您没有获得有关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/

10-11 22:46
查看更多