407 lines
19 KiB
VB.net

Imports System.IO
Imports DigitalData.Modules.Logging
Public Class frmNB_AD
' entspricht dem, über die Toolbar-Combobox ausgewählten, Profil und enthält alle relevanten Informationen darüber
Private _selectedProfile As ClassNIProfil
Private Shared _Instance As frmNB_AD = Nothing
Public Shared _profilname As String
Public Shared _profilID As Integer
Public Shared _Objekttyp As String
Dim _windreamRechte As ClassWD_Rechte
Dim FormClose = False
Private Shared _Logger As DigitalData.Modules.Logging.Logger
Private Shared _MyLogger As LogConfig
Private _SQLLite As ClassSQLITE
Public Shared Function Instance() As frmNB_AD
If _Instance Is Nothing OrElse _Instance.IsDisposed = True Then
_Instance = New frmNB_AD
End If
_Instance.BringToFront()
Return _Instance
End Function
Private Sub frmNB_AD_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
End Sub
Sub saveData()
'Me.TBNI_NACHBEARBEITUNG_ADBindingSource.EndEdit()
Dim filePath As String = Application.StartupPath & "\Nachbearbeitung.xml"
DSNachbearbeitung.WriteXml(filePath)
End Sub
Private Sub frmNB_AD_Load(sender As Object, e As EventArgs) Handles Me.Load
_MyLogger = New LogConfig(LogConfig.PathType.CustomPath, Path.Combine(My.Application.Info.DirectoryPath, "Log"))
_Logger = _MyLogger.GetLogger()
_MyLogger.Debug = Not (My.Settings.vLogErrorsonly)
_SQLLite = New ClassSQLITE(_MyLogger)
_windreamRechte = New ClassWD_Rechte(_MyLogger, _SQLLite)
_windreamRechte.Init()
' alle Profile in die Toolbar-Combobox eintragen
Me.LoadProfilesInCombobox()
If Load_Data() = False Then
FormClose = True
End If
End Sub
Private Function Load_Data()
Try
If IO.File.Exists(Application.StartupPath & "\ToolCollection.sqlite") Then
My.Settings.SQLLITE_CONNECTION = Application.StartupPath & "\ToolCollection.sqlite"
My.Settings.Save()
If _SQLLite.DBInit(True) = False Then
MsgBox("es konnte keine Verbindung zur Datenbank hergestellt werden!" & vbNewLine & "Bitte vergewissern Sie sich das die DB zugreifbar ist!", MsgBoxStyle.Critical)
Me.Close()
End If
End If
'If IO.File.Exists(Application.StartupPath & "\Nachbearbeitung.xml") Then
' DSNachbearbeitung.Tables("TBNI_NACHBEARBEITUNG_AD").ReadXml(Application.StartupPath & "\Nachbearbeitung.xml")
'End If
Return True
Catch ex As Exception
MsgBox("Fehler bei Laden der Nachbearbeitungsregeln:" & vbNewLine & ex.Message & vbNewLine & vbNewLine & "Das Formular wird geschlossen!", MsgBoxStyle.Critical)
Return False
End Try
End Function
''' <summary>
''' Schreibt die Profile in die Combobox in der Toolbar.
''' </summary>
''' <remarks></remarks>
Private Sub LoadProfilesInCombobox()
Try
Dim anz As Integer = 0
ClassNIProfile.Init()
Me.cmbProfilauswahl.DropDownItems.Clear()
If ClassNIProfile.Profile IsNot Nothing Then
For Each item As ClassNIProfil In ClassNIProfile.Profile
Me.cmbProfilauswahl.DropDownItems.Add(item.Profilname)
anz += 1
Next
' Me.tslblAnzahl.Text = "Anzahl Profile: " & anz
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler beim Laden der Profile in die Auswahlliste")
End Try
End Sub
Private Sub cmbProfilauswahl_DropDownItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles cmbProfilauswahl.DropDownItemClicked
' wenn bereits ein Profil ausgewählt wurde
If Me._selectedProfile IsNot Nothing Then
' wenn es sich bei dem ausgewählten Elementum das gleiche handelt wie das Aktive, dann nichts tun
If e.ClickedItem.Text = Me._selectedProfile.Profilname Then
Exit Sub
End If
End If
Lade_Profil(e.ClickedItem.Text)
End Sub
Sub Lade_Profil(ByVal name As String)
' das ausgewählte Profil in _selectedProfile laden
Me._selectedProfile = ClassNIProfile.getProfilByName(name)
' wenn das selektierte Profil gefunden wurde
If Me._selectedProfile IsNot Nothing Then
Me.lblProfil.Text = "Gewähltes Profil: '" & Me._selectedProfile.Profilname & "'"
_profilname = _selectedProfile.Profilname
_Objekttyp = _selectedProfile.DokumenttypString
' Das Profil auf gespeichert setzen, da ja keine Änderungen am Profil selbst gemacht wurden. Das Profil
' hat jedoch zu diesem Zeitpunkt den Status HasChanges(), da der Inhalt der Steuerelemente verändert wurde.
Me._selectedProfile.setSaved()
Dim DT As DataTable = _SQLLite.Return_Datatable("select * from TBNI_NACHBEARBEITUNG_AD WHERE NI_PROFILNAME = '" & _profilname & "'", True)
If DT Is Nothing = False Then
gbxProfil.Visible = True
If DT.Rows.Count = 0 Then
'Alle Profil- und Regelcontrols ausblenden
btnAssistent.Visible = False
btnAddSaveProfil.Text = "Nachbearbeitungsprofil Active Directory anlegen"
btnAddSaveProfil.Image = My.Resources.add
Me.lblBeschreibung.Visible = False
Me.btnAssistent.Visible = False
Me.btndeleteRegel.Visible = False
Me.DataGridView.Visible = False
grbxTest.Visible = False
'Profilcontrols leeren
chkbx_ProfilAktiv.Enabled = False
txtID.Text = ""
chkbx_Loeschen.Checked = False
chkbx_ProfilAktiv.Checked = False
txtDomäne.Text = ""
txtUser.Text = ""
txtPW.Text = ""
txtServername.Text = ""
txtErstelltwer.Text = ""
txtErstelltwann.Text = ""
txtgeaendertwer.Text = ""
txtgeaendertwann.Text = ""
Else
'Daten laden
btnAssistent.Visible = True
btnAddSaveProfil.Text = "Nachbearbeitungsprofil Active Directory speichern"
btnAddSaveProfil.Image = My.Resources.save
Me.lblBeschreibung.Visible = True
Me.btnAssistent.Visible = True
chkbx_ProfilAktiv.Enabled = True
For Each row As DataRow In DT.Rows
txtID.Text = row.Item("GUID")
_profilID = row.Item("GUID")
chkbx_Loeschen.Checked = CBool(row.Item("DEL_ALL_RIGHTS"))
chkbx_ProfilAktiv.Checked = CBool(row.Item("Aktiv"))
txtDomäne.Text = row.Item("Domain")
txtUser.Text = row.Item("Username")
txtPW.Text = row.Item("Password")
txtServername.Text = row.Item("Servername")
txtErstelltwer.Text = row.Item("ERSTELLTWER")
txtErstelltwann.Text = row.Item("ERSTELLTWANN")
txtgeaendertwer.Text = row.Item("GEAENDERTWER").ToString
txtgeaendertwann.Text = row.Item("GEAENDERTWANN").ToString
Load_Regeln()
Next
End If
End If
Me.TBNI_NACHBEARBEITUNG_ADBindingSource.Filter = "Profilname = '" & Me._selectedProfile.Profilname & "'"
Else
'Me._selectedProfile.Dokumenttyp
End If
End Sub
Private Sub btnAssistent_Click(sender As Object, e As EventArgs) Handles btnAssistent.Click
If Me._selectedProfile IsNot Nothing Then
frmNB_AD_add.ShowDialog()
Load_Regeln()
End If
End Sub
Sub Load_Regeln()
Try
Dim DT As DataTable = _SQLLite.Return_Datatable("select GUID as ID,METHODE as Methode,Rechtename as Rechtename, " &
"CASE ACCESS_RIGHT WHEN 1 THEN 'READ' WHEN 2 THEN 'READ WRITE' WHEN 9 THEN 'READ/INDEX CHANGE' ELSE 'ADMIN' END Recht, ErstelltWer as [Erstellt wer] from TBNI_NB_STEP_AD WHERE PROFIL_ID = " & _profilID, True)
If DT.Rows.Count > 0 Then
btndeleteRegel.Visible = True
DataGridView.Visible = True
DataGridView.DataSource = DT
DataGridView.AutoResizeColumns()
grbxTest.Visible = True
'Überprüfen ob das Rechtemodul auf created Folder angewendet werden soll
Dim crFolder As Boolean = False
For Each Row As DataRow In DT.Rows
If Row.Item(1).ToString = "AddRightCreatedFolder" Then
If crFolder = False Then crFolder = True
End If
Next
If crFolder = True Then
Me.lbltestfolder.Visible = True
Me.txtTestfolder.Visible = True
Else
Me.lbltestfolder.Visible = False
Me.txtTestfolder.Visible = False
End If
Else
DataGridView.Visible = False
btndeleteRegel.Visible = False
grbxTest.Visible = False
End If
If DT.Rows.Count = 1 And chkbx_Loeschen.Checked Then
For Each row As DataRow In DT.Rows
If row.Item(3).ToString <> "ADMIN" Then
MsgBox("ACHTUNG:" & vbNewLine & "Diese Regel wird nicht funktionieren, da der erste Rechteträger - bei Löschen aller bestehenden Regeln - " &
"immer ein Rechteträger mit administrativen Rechten sein muss!", MsgBoxStyle.Critical)
End If
Next
End If
' Dim DataView1 As DataView = New DataView(DSNachbearbeitung.Tables("TBNI_NACHBEARBEITUNG_AD"))
' DataView1.RowFilter = "Profilname = '" & Me._selectedProfile.Profilname & "'"
' ListBox1.Items.Clear()
' For Each rowView As DataRowView In DataView1
' ListBox1.Items.Add(rowView(0) & " - " & rowView("Rechtename"))
' 'MsgBox(rowView(0))
' Next
Catch ex As Exception
MsgBox("Fehler beim Laden der Nachbearbeitungen zu Profil:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub btndelete_Click(sender As Object, e As EventArgs) Handles btndeleteProfil.Click
Dim result As MsgBoxResult = MsgBox("Wollen Sie das gewählte Profil und die dazu gehörigen Regeln wirklich löschen?", MsgBoxStyle.YesNo, "Bestätigung erforderlich:")
If result = MsgBoxResult.Yes Then
If _SQLLite.Execute_Command("Delete from TBNI_NB_STEP_AD WHERE PROFIL_ID = " & txtID.Text, True) = True Then
If _SQLLite.Execute_Command("Delete from TBNI_NACHBEARBEITUNG_AD WHERE GUID = " & txtID.Text, True) Then
Lade_Profil(_selectedProfile.Profilname)
End If
End If
End If
End Sub
' If TBNI_NACHBEARBEITUNG_ADDataGridView.SelectedRows.Count > 0 Then
'If TBNI_NACHBEARBEITUNG_ADDataGridView.SelectedRows.Count > 0 Then
'Dim i As Integer
' i = TBNI_NACHBEARBEITUNG_ADDataGridView.CurrentRow.Index
' If TBNI_NACHBEARBEITUNG_ADDataGridView.Item(0, i).Value Is Nothing = False Then
''MsgBox(TBNI_NACHBEARBEITUNG_ADDataGridView.Item(0, i).Value)
' For Each row As DataRow In DSNachbearbeitung.TBNI_NACHBEARBEITUNG_AD.Rows
' If row.Item("ID") = TBNI_NACHBEARBEITUNG_ADDataGridView.Item(0, i).Value Then
' row.Delete()
' Exit For
' End If
' Next
' End If
' TBNI_NACHBEARBEITUNG_ADBindingSource.EndEdit()
' saveData()
' DSNachbearbeitung.TBNI_NACHBEARBEITUNG_AD.Clear()
' Load_Data()
' End If
Private Sub SaveRegeln_Click(sender As Object, e As EventArgs)
TBNI_NACHBEARBEITUNG_ADBindingSource.EndEdit()
DSNachbearbeitung.TBNI_NACHBEARBEITUNG_AD.Clear()
Load_Data()
End Sub
Private Sub TBNI_NACHBEARBEITUNG_ADDataGridView_RowsRemoved(sender As Object, e As DataGridViewRowsRemovedEventArgs)
End Sub
Private Sub btnAddSaveProfil_Click(sender As Object, e As EventArgs) Handles btnAddSaveProfil.Click
If txtDomäne.Text <> "" And txtServername.Text <> "" Then
If btnAddSaveProfil.Text.EndsWith("anlegen") Then
Dim loeschen As Integer
If chkbx_Loeschen.Checked Then
loeschen = 1
Else
loeschen = 0
End If
If _SQLLite.Execute_Command("INSERT INTO TBNI_NACHBEARBEITUNG_AD (NI_PROFILNAME,DEL_ALL_RIGHTS,Domain,Servername,Username,Password,ERSTELLTWER) VALUES (" &
"'" & Me._selectedProfile.Profilname & "'," & loeschen & ",'" & txtDomäne.Text & "','" & txtServername.Text & "','" &
txtUser.Text & "','" & txtPW.Text & "','" & Environment.UserName & "')", True) = True Then
Lade_Profil(Me._selectedProfile.Profilname)
End If
Else
Dim Aktiv As Integer
If chkbx_ProfilAktiv.Checked Then
Aktiv = 1
Else
Aktiv = 0
End If
Dim loeschen As Integer
If chkbx_Loeschen.Checked Then
loeschen = 1
Else
loeschen = 0
End If
If _SQLLite.Execute_Command("UPDATE TBNI_NACHBEARBEITUNG_AD set Aktiv = " & Aktiv & ",DEL_ALL_RIGHTS = " & loeschen &
", Domain = '" & txtDomäne.Text & "', Servername = '" & txtServername.Text & "', Username = '" & txtUser.Text & "', " &
"Password = '" & txtPW.Text & "', GEAENDERTWER = '" & Environment.UserName & "' where GUID = " & txtID.Text, True) = True Then
Lade_Profil(Me._selectedProfile.Profilname)
MsgBox("Die Änderungen wurden erfolgreich gespeichert", MsgBoxStyle.Exclamation, "Erfolgsmeldung")
End If
End If
Else
MsgBox("Bitte geben Sie für alle Pflichtfelder einen Wert ein!", MsgBoxStyle.Exclamation)
End If
End Sub
Private Sub btndeleteRegel_Click(sender As Object, e As EventArgs) Handles btndeleteRegel.Click
If DataGridView.SelectedRows.Count > 0 Then
Dim i As Integer
i = DataGridView.CurrentRow.Index
If DataGridView.Item(0, i).Value Is Nothing = False Then
If _SQLLite.Execute_Command("DELETE FROM TBNI_NB_STEP_AD WHERE GUID = " & DataGridView.Item(0, i).Value, True) Then
Load_Regeln()
End If
End If
End If
End Sub
Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click
If txtTestfile.Text <> "" Or txtTestfolder.Text <> "" Then
If DataGridView.SelectedRows.Count > 0 Then
Dim DT As DataTable = DataGridView.DataSource
'Überprüfen ob das Rechtemodul auf created Folder angewendet werden soll
Dim crFolder As Boolean = False
For Each Row As DataRow In DT.Rows
If Row.Item(1).ToString = "AddRightCreatedFolder" Then
If crFolder = False Then crFolder = True
End If
Next
If crFolder = True And txtTestfolder.Text = "" Then
MsgBox("Bitte geben Sie einen Beispielordner an!", MsgBoxStyle.Exclamation)
txtTestfolder.BackColor = Color.Red
txtTestfolder.Focus()
Exit Sub
Else
txtTestfolder.BackColor = Color.White
End If
Dim i As Integer
i = DataGridView.CurrentRow.Index
If DataGridView.Item(0, i).Value Is Nothing = False Then
Dim testfile As String
If crFolder = True Then
testfile = "W:ONLY_FOLDER"
Else
testfile = txtTestfile.Text
End If
If _windreamRechte.FileFolder_DeleteAndOrSetRight(testfile.Substring(2), _profilID, DataGridView.Item(0, i).Value, False, txtTestfolder.Text, True) = True Then
MsgBox("Das Recht wurde erfolgreich getestet und zugewiesen!", MsgBoxStyle.Information, "Erfolgsmeldung:")
End If
End If
Else
MsgBox("Bitte wählen Sie eine Regel aus der Ansicht per Klick auf die Zeile aus!", MsgBoxStyle.Exclamation)
End If
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If Not Me.txtTestfile.Text = "" Then
Me.OpenFileDialog1.FileName = Me.txtTestfile.Text
End If
If Me.OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
Me.txtTestfile.Text = Me.OpenFileDialog1.FileName
End If
End Sub
Private Sub btnEnvironment_Click(sender As Object, e As EventArgs) Handles btnEnvironment.Click
Me.txtUser.Text = Environment.UserName
Me.txtDomäne.Text = System.Net.Dns.GetHostByName("localhost").HostName.Replace(System.Net.Dns.GetHostName & ".", "")
Me.txtServername.Text = _windreamRechte.oServername
Me.txtPW.Text = ""
End Sub
Private Sub DataGridView_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView.SelectionChanged
Dim i As Integer
i = DataGridView.CurrentRow.Index
If DataGridView.Item(0, i).Value Is Nothing = False Then
Me.btnTest.Text = "Teste Regel " & DataGridView.Item(0, i).Value.ToString
' MsgBox(DataGridView.Item(0, i).Value)
End If
End Sub
Private Sub frmNB_AD_Shown(sender As Object, e As EventArgs) Handles Me.Shown
If FormClose = True Then
Me.Close()
End If
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles btnTest_Anmeldung.Click
If _windreamRechte.Check_Login_Session(Me.txtDomäne.Text, Me.txtServername.Text, Me.txtUser.Text, Me.txtPW.Text) = True Then
MsgBox("Die personifizierte Verbindung zu windream konnte erfolgreich aufgebaut werden!", MsgBoxStyle.Information)
Else
MsgBox("Eine personifizierte Verbindung zu windream konnte NICHT aufgebaut werden!" & vbNewLine & "Bitte prüfen Sie die Userangaben!", MsgBoxStyle.Critical)
End If
End Sub
Private Sub txtTestfolder_TextChanged(sender As Object, e As EventArgs)
txtTestfolder.BackColor = Color.White
End Sub
End Class