2011-08-12 77 views
0

我有以下的方法來檢查當前用戶必須給定的網絡位置檢查共享文件夾的寫訪問當前用戶

DirectorySecurity shareSecurity = new DirectoryInfo(this.GetFileServerRootPath).GetAccessControl(); 

foreach (FileSystemAccessRule fsRule in shareSecurity.GetAccessRules(true, true, typeof(NTAccount))) 
{ 
    // check write permission for current user 
    if (AccessControlType.Allow == fsRule.AccessControlType && 
      FileSystemRights.Write == (fsRule.FileSystemRights & FileSystemRights.Write)) 
    { 
     if (null != fsRule.IdentityReference && 
      fsRule.IdentityReference.Value == WindowsIdentity.GetCurrent().Name) 
     { 
      return true; 
     } 
    } 
} 
return false; 

寫訪問,但問題是,當文件夾的權限提供給用戶組,上述方法失敗。

我不想寫一個文件,檢查權限,並決定寫訪問權限。

有沒有什麼辦法來查找IdentityReference.Value當前用戶?或建議來解決這個問題?

+0

我猜這是因爲這部分返回false:'fsRule.IdentityReference.Value == WindowsIdentity.GetCurrent()。Name' – Azodious

+0

是的,當'fsRule.IdentityReference.Value'是一個組時,我需要檢查用戶是否該組的成員或不是 – Damith

回答

1

這可能會爲你工作:

FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, this.GetFileServerRootPath); 

try 
{ 
    writePermission.Demand(); 
    return true; 
} 
catch (SecurityException s) 
{ 
    return false; 
} 

只是好奇 - 爲什麼不乾脆的try/catch你寫操作?

0

可能應該使用該目錄上的DirectoryInfo來獲取其安全策略。

相關問題