vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Zugriff 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zugriff auf Netzwerkordner abfragen 
Autor: effeff
Datum: 07.12.20 14:37

Wieso versuchst Du, mit einem StreamReader einen Pfad zu öffnen? Damit öffnet man Textdateien...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 ...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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