我必须检查登录系统并运行应用程序的用户是否对某个文件具有指定的权限。 运行应用程序的用户位于" BUILTIN \ Administrators"组。 虽然文件是本地的一切都很好。我使用该代码(从答案中采用的版本Checking for directory and file write permissions in .NET):
private static bool HasPermission(FileSystemRights permission, AuthorizationRuleCollection accessRules )
{
var allow = false;
var inheritedDeny = false;
var inheritedAllow = false;
if (accessRules == null)
return false;
var currentUser = WindowsIdentity.GetCurrent();
var currentPrincipal = new WindowsPrincipal(currentUser);
foreach (FileSystemAccessRule rule in accessRules)
{
if ((permission & rule.FileSystemRights) != permission)
continue;
if (!currentPrincipal.IsInRole(rule.IdentityReference.Value))
{
continue;
}
if (rule.AccessControlType == AccessControlType.Allow)
{
if (rule.IsInherited)
inheritedAllow = true;
else
allow = true;
}
else if (rule.AccessControlType == AccessControlType.Deny)
{
if (!rule.IsInherited)
return false;
inheritedDeny = true;
}
}
var combined = allow || (inheritedAllow && !inheritedDeny);
return combined;
}
但是当我尝试检查网络共享文件的权限时,我遇到了问题。 例如,与远程计算机用户的FullControl访问规则共享的文件,该远程用户也在" BUILTIN / Administrators"组。对于"每个人" group user是ReadOnly文件。
因此,当我使用当前的本地登录用户检查时,使用该代码:
if (!currentPrincipal.IsInRole(rule.IdentityReference.Value))
{
continue;
}
由于我的登录用户也在" BUILTIN / Administrators"组。 所以代码返回TRUE,但在现实生活中我没有对该文件的写访问权。
如何区分本地和远程管理员的组用户?
PS:我不想使用例外来检查可访问性,这将是"最后的希望代码"