| |
VB.NET - Ein- und UmsteigerZugriff auf Netzwerkordner abfragen | | | Autor: stefanbla80 | Datum: 07.12.20 13:59 |
| Hallo zusammen,
Auf meinem Tool habe ich einen Button, der auf ein bestimmtes Laufwerk verweißt und dieses öffnen soll.
Nehmen wir als Beispiel "F:\Temp"
Ich würde gerne, bevor mein der Order Temp geöffnet wird abfragen, ob der jeweilige Nutzer überhaupt das Lese-/ bzw. Schreibrecht hab. Nach meinen Versuchen mit "If IO.Directory.Exists(....)" sieht der Nutzer zwar das Verzeichnis, kann aber trotzdem nicht zugreifen und ich bekomme dann eine Fehlermeldung bzw. das Tool stürzt ab.
Auch mit diesem Code von hier aus dem Forum komme ich nicht weiter.
Function Rechteabfrage() As Boolean
Try
Dim Reader As System.IO.StreamReader
Reader = New System.IO.StreamReader(Pfad)
Reader.Close()
Reader = Nothing
Return True
Catch ex As UnauthorizedAccessException
MsgBox("Sie haben auf " & Pfad & " keine Zugriffsberechtigung")
Return False
Catch ex2 As System.IO.FileNotFoundException
Return False
End Try
End Function Hier bekomme ich als Ausgabe, dass ich keinen Zugriff habe obwohl ich dieses habe.
Kann hier jemand Licht in Dunkle bringen?!
Grüße
Stefan | |
Re: Zugriff auf Netzwerkordner abfragen | | | Autor: stefanbla80 | Datum: 07.12.20 15:23 |
| Mit diesem Code soll versucht werden ob man generell Zugriff hat - so habe ich das zumindest verstanden.
Ich würde einfach nur gerne abfrage "Zugriff ja/nein".
Aber scheint wohl nicht so einfach zu funktionieren ... | |
Re: Zugriff auf Netzwerkordner abfragen | | | Autor: HenryV | Datum: 07.12.20 16:54 |
| Ich verwende dazu diese Klasse hier -> Checking for directory and file write permissions in .NET
''' <summary>
''' Checking for directory and file write permissions
''' </summary>
''' <remarks>https://stackoverflow.com/a/22020271</remarks>
Public Class CurrentUserSecurity
Private ReadOnly _currentUser As WindowsIdentity
Private ReadOnly _currentPrincipal As WindowsPrincipal
Public Sub New()
_currentUser = WindowsIdentity.GetCurrent()
_currentPrincipal = New WindowsPrincipal(WindowsIdentity.GetCurrent())
End Sub
Public Function HasAccess(directory As IO.DirectoryInfo, right As _
Security.AccessControl.FileSystemRights) As Boolean
' Get the collection of authorization rules that apply to the directory.
Try
Dim acl As Security.AccessControl.AuthorizationRuleCollection = _
directory.GetAccessControl().GetAccessRules(True, True, GetType( _
SecurityIdentifier))
Return HasFileOrDirectoryAccess(right, acl)
Catch UAEx As UnauthorizedAccessException
Return False
End Try
End Function
Public Function HasAccess(file As IO.FileInfo, right As _
Security.AccessControl.FileSystemRights) As Boolean
' Get the collection of authorization rules that apply to the file.
Try
Dim acl As Security.AccessControl.AuthorizationRuleCollection = _
file.GetAccessControl().GetAccessRules(True, True, GetType( _
SecurityIdentifier))
Return HasFileOrDirectoryAccess(right, acl)
Catch UAEx As UnauthorizedAccessException
Return False
End Try
End Function
Private Function HasFileOrDirectoryAccess(right As _
Security.AccessControl.FileSystemRights, acl As _
Security.AccessControl.AuthorizationRuleCollection) As Boolean
Dim allow As Boolean = False
Dim inheritedAllow As Boolean = False
Dim inheritedDeny As Boolean = False
For i As Integer = 0 To acl.Count - 1
Dim currentRule As Security.AccessControl.FileSystemAccessRule = _
DirectCast(acl(i), Security.AccessControl.FileSystemAccessRule)
' If the current rule applies to the current user.
If _currentUser.User.Equals(currentRule.IdentityReference) OrElse _
_currentPrincipal.IsInRole(DirectCast( _
currentRule.IdentityReference, SecurityIdentifier)) Then
If currentRule.AccessControlType.Equals( _
Security.AccessControl.AccessControlType.Deny) Then
If (currentRule.FileSystemRights And right) = right Then
If currentRule.IsInherited Then
inheritedDeny = True
Else
' Non inherited "deny" takes overall precedence.
Return False
End If
End If
ElseIf currentRule.AccessControlType.Equals( _
Security.AccessControl.AccessControlType.Allow) Then
If (currentRule.FileSystemRights And right) = right Then
If currentRule.IsInherited Then
inheritedAllow = True
Else
allow = True
End If
End If
End If
End If
Next
If allow Then
' Non inherited "allow" takes precedence over inherited rules.
Return True
End If
Return inheritedAllow AndAlso Not inheritedDeny
End Function
End Class Aufrufen tu ich es dann so:
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) _
Handles Button1.Click
Dim sPath As String = "F:\Temp"
If IO.Directory.Exists(sPath) Then
Dim CUS As New CurrentUserSecurity
Dim test As Boolean = CUS.HasAccess(New IO.DirectoryInfo(sPath), _
Security.AccessControl.FileSystemRights.Write)
MessageBox.Show($"Sie {If(test, "haben", "haben KEIN")} Schreibzugriff" & _
"auf {sPath}.")
Else
MessageBox.Show($"Kann {sPath} nich finden.")
End If
End Sub | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|