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 = "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
End Class
