202 lines
10 KiB
VB.net
202 lines
10 KiB
VB.net
Public Class cBerechtignunen
|
|
|
|
|
|
|
|
Shared BER_LIST As New cBerechtigungsObjekte_List 'NEW = Laden
|
|
|
|
' Sub initBER()
|
|
' BER_LIST = New cBerechtigungsObjekte_List
|
|
' End Sub
|
|
|
|
Public Shared Function CHECK_BERECHTIGUNG(Form_Berechtigung As System.Windows.Forms.Form) As Integer ' Klärt die Berechtigungs-Zugriffs-Stufe des Mitarbeiters für das Object
|
|
Return CHECK_BERECHTIGUNG(Form_Berechtigung.Name, Form_Berechtigung.GetType.Module.Name.Replace(".exe", ""))
|
|
End Function
|
|
|
|
|
|
Public Shared Function CHECK_BERECHTIGUNG(Berechtigung_Bezeichnung As String, ME_Form As System.Windows.Forms.Form) As Integer ' Klärt die Berechtigungs-Zugriffs-Stufe des Mitarbeiters für das Object
|
|
Return CHECK_BERECHTIGUNG(Berechtigung_Bezeichnung, ME_Form.GetType.Module.Name.Replace(".exe", ""))
|
|
End Function
|
|
|
|
Public Shared Function CHECK_BERECHTIGUNG_bool(Berechtigung_Bezeichnung As String, ME_Form As System.Windows.Forms.Form) As Boolean ' Klärt die Berechtigungs-Zugriffs-Stufe des Mitarbeiters für das Object
|
|
Try
|
|
|
|
If ME_Form Is Nothing Then Return False
|
|
Dim prog = ME_Form.GetType.Module.Name.Replace(".exe", "") 'FEHLER
|
|
Return (CHECK_BERECHTIGUNG(Berechtigung_Bezeichnung, prog) = 0)
|
|
Catch ex As Exception
|
|
MsgBox("BERECHTIGUNGSERR: " & Berechtigung_Bezeichnung & vbNewLine & vbNewLine & ex.Message & vbNewLine & ex.StackTrace)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
Public Shared Function CHECK_BERECHTIGUNG_bool(Berechtigung_Bezeichnung As String, prog_Name As String) As Boolean ' Klärt die Berechtigungs-Zugriffs-Stufe des Mitarbeiters für das Object
|
|
Try
|
|
Return (CHECK_BERECHTIGUNG(Berechtigung_Bezeichnung, prog_Name) = 0)
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message & vbNewLine & ex.StackTrace)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
Public Shared Function CHECK_BERECHTIGUNG(Berechtigung_Bezeichnung As String, prog_Name As String) As Integer ' Klärt die Berechtigungs-Zugriffs-Stufe des Mitarbeiters für das Object
|
|
Dim SQL As New SQL
|
|
Dim prog_id = -1
|
|
|
|
Select Case prog_Name
|
|
Case "AVISO"
|
|
'If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" Then
|
|
' prog_id = 13
|
|
' Else
|
|
prog_id = 5
|
|
'End If
|
|
Case "SDL"
|
|
prog_id = 7
|
|
Case Else
|
|
' MsgBox("SELECT isnull([prog_id],0) FROM [tblProgramme] WHERe [prog_codename]='" & prog_Name & "'")
|
|
prog_id = SQL.getValueTxtBySql("SELECT isnull([prog_id],0) FROM [tblProgramme] WHERe [prog_codename]='" & prog_Name & "'", "ADMIN")
|
|
End Select
|
|
|
|
Return CHECK_BERECHTIGUNG(Berechtigung_Bezeichnung, prog_id)
|
|
End Function
|
|
|
|
Public Shared Function CHECK_BERECHTIGUNG(ber_bez As String, prog_Id As Integer) As Integer ' Klärt die Berechtigungs-Zugriffs-Stufe des Mitarbeiters für das Object
|
|
Try
|
|
If VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME = "" Then Return 0
|
|
|
|
Dim berechtigungsstufe As Integer = 99
|
|
Dim benutzerBer As cBerechtigungenBenutzerGruppenZuordnung_List = VERAG_PROG_ALLGEMEIN.cAllgemein.BENUTZER_BERECHTIGUNGS_GRUPPEN
|
|
If benutzerBer Is Nothing Then
|
|
MsgBox("Ihrem Benutzerkonto wurden keine Berechtigungen zugeordnet!")
|
|
Return 0
|
|
End If
|
|
|
|
Dim found = False
|
|
For Each lber In BER_LIST.LIST
|
|
If lber.bero_bezeichnung.ToUpper = ber_bez.ToUpper And lber.bero_progId = prog_Id Then
|
|
found = True : Exit For
|
|
End If
|
|
Next
|
|
If Not found Then 'Die Berechtigungszuorgnung ist nicht gegeben --> Zugriff verwehrt
|
|
MsgBox("Die Berechtigung '" & ber_bez & "' existiert nicht.")
|
|
Return 99
|
|
End If
|
|
|
|
For Each lber In BER_LIST.LIST
|
|
If lber.bero_bezeichnung.ToUpper = ber_bez.ToUpper And lber.bero_progId = prog_Id Then
|
|
For Each ll In lber.BER_OBJ_ZUORD 'Liste der BerechtignungGruppen im Berechtigungsonjekt
|
|
For Each bb In benutzerBer.LIST
|
|
If bb.berbgz_progId = prog_Id Then 'BenutzerProg = Prog
|
|
|
|
If ll.beroz_berechtigungsstufe >= 100 Then Return ll.beroz_berechtigungsstufe 'Größer als 3 stellen --> immer priorität
|
|
|
|
If ll.beroz_art = "G" And ll.beroz_bergrId = bb.berbgz_bergrId Then 'GruppenBerchtigung
|
|
'gefunden!
|
|
If ll.beroz_berechtigungsstufe < berechtigungsstufe Then berechtigungsstufe = ll.beroz_berechtigungsstufe
|
|
ElseIf ll.beroz_art = "F" And ll.Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA Then
|
|
If ll.beroz_berechtigungsstufe < berechtigungsstufe Then berechtigungsstufe = ll.beroz_berechtigungsstufe
|
|
ElseIf ll.beroz_art = "N" And ll.Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG Then
|
|
If ll.beroz_berechtigungsstufe < berechtigungsstufe Then berechtigungsstufe = ll.beroz_berechtigungsstufe
|
|
ElseIf ll.beroz_art = "A" And ll.Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.ABTEILUNG Then
|
|
If ll.beroz_berechtigungsstufe < berechtigungsstufe Then berechtigungsstufe = ll.beroz_berechtigungsstufe
|
|
ElseIf ll.beroz_art = "B" And ll.beroz_bergrId = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID Then
|
|
Return ll.beroz_berechtigungsstufe 'Definitiv dem Benutzer zugeordnete Berechtigung!!!!
|
|
End If
|
|
End If
|
|
Next
|
|
Next
|
|
End If
|
|
Next
|
|
|
|
Return berechtigungsstufe
|
|
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message & ex.StackTrace)
|
|
End Try
|
|
Return 99
|
|
End Function
|
|
|
|
Public Shared Function GetBenutzerBerechtigungsBezeichnungen(prog_Id As Integer) As List(Of String)
|
|
Dim result As New List(Of String)
|
|
Console.WriteLine("=== Starte GetBenutzerBerechtigungsBezeichnungen für prog_Id=" & prog_Id & " ===")
|
|
|
|
' Basisprüfungen
|
|
If String.IsNullOrWhiteSpace(VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME) Then
|
|
Console.WriteLine("Abbruch: kein Benutzername gesetzt.")
|
|
Return result
|
|
End If
|
|
|
|
Dim benutzerBer As cBerechtigungenBenutzerGruppenZuordnung_List = VERAG_PROG_ALLGEMEIN.cAllgemein.BENUTZER_BERECHTIGUNGS_GRUPPEN
|
|
If benutzerBer Is Nothing OrElse benutzerBer.LIST Is Nothing Then
|
|
Console.WriteLine("Abbruch: Benutzer hat keine Berechtigungsgruppen.")
|
|
Return result
|
|
End If
|
|
If BER_LIST Is Nothing OrElse BER_LIST.LIST Is Nothing Then
|
|
Console.WriteLine("Abbruch: BER_LIST nicht geladen.")
|
|
Return result
|
|
End If
|
|
|
|
' Benutzergruppen für das Programm vorbereiten
|
|
Dim userGruppen = benutzerBer.LIST.Where(Function(b) b.berbgz_progId = prog_Id).ToList()
|
|
Console.WriteLine("Benutzergruppen für prog_Id gefunden: " & userGruppen.Count)
|
|
|
|
Dim seen As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase)
|
|
|
|
' Alle Berechtigungsobjekte durchlaufen
|
|
For Each obj In BER_LIST.LIST
|
|
If obj Is Nothing OrElse obj.bero_progId <> prog_Id Then Continue For
|
|
|
|
Dim bez As String = If(obj.bero_bezeichnung, "")
|
|
If bez = "" OrElse seen.Contains(bez) Then Continue For
|
|
|
|
Console.WriteLine("Prüfe Berechtigung: " & bez)
|
|
|
|
Dim effektiveStufe As Integer = 99
|
|
|
|
' Gruppen/Firma/Niederlassung/Abteilung prüfen
|
|
For Each ll In obj.BER_OBJ_ZUORD
|
|
If ll.beroz_art = "G" AndAlso userGruppen.Any(Function(g) g.berbgz_bergrId = ll.beroz_bergrId) Then
|
|
Console.WriteLine($" -> Gruppe {ll.Bezeichnung} passt, Stufe={ll.beroz_berechtigungsstufe}")
|
|
If ll.beroz_berechtigungsstufe < effektiveStufe Then effektiveStufe = ll.beroz_berechtigungsstufe
|
|
ElseIf ll.beroz_art = "F" AndAlso ll.Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA Then
|
|
Console.WriteLine($" -> Firma {ll.Bezeichnung} passt, Stufe={ll.beroz_berechtigungsstufe}")
|
|
If ll.beroz_berechtigungsstufe < effektiveStufe Then effektiveStufe = ll.beroz_berechtigungsstufe
|
|
ElseIf ll.beroz_art = "N" AndAlso ll.Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG Then
|
|
Console.WriteLine($" -> Niederlassung {ll.Bezeichnung} passt, Stufe={ll.beroz_berechtigungsstufe}")
|
|
If ll.beroz_berechtigungsstufe < effektiveStufe Then effektiveStufe = ll.beroz_berechtigungsstufe
|
|
ElseIf ll.beroz_art = "A" AndAlso ll.Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.ABTEILUNG Then
|
|
Console.WriteLine($" -> Abteilung {ll.Bezeichnung} passt, Stufe={ll.beroz_berechtigungsstufe}")
|
|
If ll.beroz_berechtigungsstufe < effektiveStufe Then effektiveStufe = ll.beroz_berechtigungsstufe
|
|
End If
|
|
Next
|
|
|
|
If effektiveStufe <> 99 Then
|
|
Console.WriteLine($" -> Hinzugefügt: {bez} (effektive Stufe={effektiveStufe})")
|
|
result.Add(bez)
|
|
seen.Add(bez)
|
|
Else
|
|
Console.WriteLine($" -> Keine Berechtigung für {bez}")
|
|
End If
|
|
Next
|
|
|
|
result.Sort(StringComparer.OrdinalIgnoreCase)
|
|
Console.WriteLine("=== Fertig: " & result.Count & " Berechtigungen gefunden ===")
|
|
Return result
|
|
End Function
|
|
|
|
Public Shared Function GetBenutzerBerechtigungsBezeichnungen_FormatWhereIn_SDL() As String
|
|
Dim BER As List(Of String) = GetBenutzerBerechtigungsBezeichnungen(7) '7=Prog_id von SDL 'VERAG_PROG_ALLGEMEIN.cAllgemein.PROGID) sdl
|
|
Return FormatWhereIn(BER)
|
|
|
|
End Function
|
|
Private Shared Function FormatWhereIn(berechtigungen As List(Of String)) As String
|
|
If berechtigungen Is Nothing OrElse berechtigungen.Count = 0 Then
|
|
Return "()"
|
|
End If
|
|
|
|
' Strings für SQL korrekt in Hochkommas packen, einfache Quotes escapen
|
|
Dim escaped = berechtigungen.Select(Function(b) "'" & b.Replace("'", "''") & "'")
|
|
Return "(" & String.Join(",", escaped) & ")"
|
|
End Function
|
|
|
|
End Class
|