我有一个共享文件夹。如何检查C#是否已授予当前用户访问该文件夹的权限?
我已经尝试SecurityManager.IsGranted
但不知怎的,这对我没有好处。可能是因为它是用于文件,而不是用于文件夹。
答案 0 :(得分:5)
如果您未获得许可,请使用Directory.Exists
它将返回false
。
请参阅备注部分 MSDN
同样如@jbriggs的答案所示,如果您无法访问,则应获得UnautorizedAccessException
。
答案 1 :(得分:-1)
如果我没记错的话,你只需要尝试在文件夹中写一些内容或从文件夹中读取内容并捕获异常。
编辑:您可以执行以下操作,但我不确定它是否适用于所有情况(例如,如果允许或拒绝用户组的权限)
public bool HasAccess(string path, string user)
{
System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.WorldSid, null);
System.Security.Principal.NTAccount acct = sid.Translate(typeof(System.Security.Principal.NTAccount)) as System.Security.Principal.NTAccount;
bool userHasAccess = false;
if( Directory.Exists(path))
{
DirectorySecurity sec = Directory.GetAccessControl(path);
AuthorizationRuleCollection rules = sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
foreach (AccessRule rule in rules)
{
// check is the Everyone account is denied
if (rule.IdentityReference.Value == acct.ToString() &&
rule.AccessControlType == AccessControlType.Deny)
{
userHasAccess = false;
break;
}
if (rule.IdentityReference.Value == user)
{
if (rule.AccessControlType != AccessControlType.Deny)
userHasAccess = true;
else
userHasAccess = false;
break;
}
}
}
return userHasAccess;
}